Thread overview
Re: const again
Dec 07, 2007
guslay
Dec 07, 2007
Kris
Dec 07, 2007
guslay
Dec 07, 2007
Don Clugston
Dec 08, 2007
Walter Bright
December 07, 2007
Walter Bright Wrote:
> 
> Yes for that reason, and the other reason is one rarely wants storage allocated for manifest constants. windows.d has 10,000 declarations in it, who wants 40K of executable bloat from const declarations?
> 

const int x = 1;

Doesn't x get substituted by 1 everywhere in a constant propagation pass? I thought it didn't take storage, at least in optimization mode.

December 07, 2007
"guslay" <guslay@gmail.com> wrote in message news:fjao2r$ii4$1@digitalmars.com...
> Walter Bright Wrote:
>>
>> Yes for that reason, and the other reason is one rarely wants storage allocated for manifest constants. windows.d has 10,000 declarations in it, who wants 40K of executable bloat from const declarations?
>>
>
> const int x = 1;
>
> Doesn't x get substituted by 1 everywhere in a constant propagation pass? I thought it didn't take storage, at least in optimization mode.
>

all those Win32 constants actually adds over 50KB of bloat. Tango would up using enum instead, and pulled some silly linker stunts to eliminate the bloat. I think you can take the address of a const?


December 07, 2007
Kris Wrote:

> "guslay" <guslay@gmail.com> wrote in message news:fjao2r$ii4$1@digitalmars.com...
> > Walter Bright Wrote:
> >>
> >> Yes for that reason, and the other reason is one rarely wants storage allocated for manifest constants. windows.d has 10,000 declarations in it, who wants 40K of executable bloat from const declarations?
> >>
> >
> > const int x = 1;
> >
> > Doesn't x get substituted by 1 everywhere in a constant propagation pass? I thought it didn't take storage, at least in optimization mode.
> >
> 
> all those Win32 constants actually adds over 50KB of bloat. Tango would up using enum instead, and pulled some silly linker stunts to eliminate the bloat. I think you can take the address of a const?
> 
> 

You're right, without whole program optimization it would probably only be optimized within the scope of a module.

December 07, 2007
Kris wrote:
> "guslay" <guslay@gmail.com> wrote in message news:fjao2r$ii4$1@digitalmars.com...
>> Walter Bright Wrote:
>>> Yes for that reason, and the other reason is one rarely wants storage
>>> allocated for manifest constants. windows.d has 10,000 declarations in
>>> it, who wants 40K of executable bloat from const declarations?
>>>
>> const int x = 1;
>>
>> Doesn't x get substituted by 1 everywhere in a constant propagation pass?
>> I thought it didn't take storage, at least in optimization mode.
>>
> 
> all those Win32 constants actually adds over 50KB of bloat. Tango would up using enum instead, and pulled some silly linker stunts to eliminate the bloat. I think you can take the address of a const? 

No, you can't, but IIRC Walter said that was actually a bug. Currently they create bloat, but are inaccessable!

December 08, 2007
Kris wrote:
> I think you can take the address of a const?

Yes, which is one of the problems with using const to declare manifest constants. The other is the type of the constant will be 'const', which may not be desirable.