[Search for users]
[Overall Top Noters]
[List of all Conferences]
[Download this site]
Title: | C++ |
Notice: | Read 1.* and use keywords (e.g. SHOW KEY/FULL KIT_CXX_VAX_VMS) |
Moderator: | DECCXX::AMARTIN |
|
Created: | Fri Nov 06 1987 |
Last Modified: | Thu Jun 05 1997 |
Last Successful Update: | Fri Jun 06 1997 |
Number of topics: | 3604 |
Total number of notes: | 18242 |
3477.0. "Storage for integer constants" by VAXCPU::michaud (Jeff Michaud - ObjectBroker) Wed Mar 05 1997 19:44
Someone in my group has defined a couple of simple constants
using something like:
const int FOO = 7;
in a header file, instead of using a preprocessor macro or an
enum, which btw, using const vars for this purpose is suggested
in the ARM (section 7.1.6).
While this, thanks to the default scope being file local, works
fine, my concern is wasted storage, as in theory each module which
includes the header file will allocate (internal linkage) storage for
FOO. This appears to be the case even if FOO is used only as a
constant, and it's address never taken (see enclosed generated
assembler), so the generated code never even references the storage.
Will the unused storage be optimized out when linked?
The only alternative that appears to work is to put:
extern const int FOO;
in the header file, and:
extern const int FOO = 7;
in a module to declare storage for it only once. But that results
in, as expected, the compiler generating code that references the
external memory in all the other modules, and hence it's not equiv
to using a constant any longer (especially if you try using it
where a constant expression is required).
.ugen
.verstamp 3 11
.rconst
.align 3
.align 0
$$3:
.long 7 : 1
.text
.align 4
.file 2 "one.cxx"
.globl routine__Xv
.loc 2 0
.ent routine__Xv 2
routine__Xv:
.option O2
ldgp $gp, 0($27)
.frame $sp, 0, $26, 0
.prologue 1
.loc 2 3
# 1 #include "foo.hxx"
# 2
# 3 int
.loc 2 5
# 4 routine()
# 5 {
.loc 2 6
# 6 return FOO;
ldil $0, 7
.livereg 0xFC7F0002,0x3FC00000
ret $31, ($26), 1
.end routine__Xv
T.R | Title | User | Personal Name | Date | Lines |
---|
3477.1 | Noted | DECCXX::AMARTIN | Alan H. Martin | Thu Mar 06 1997 14:38 | 2 |
| Thanks; I've noted this for future optimization.
/AHM
|