Program size, linking matter, and static this()

Marco Leise Marco.Leise at gmx.de
Tue Dec 20 13:07:19 PST 2011


Am 20.12.2011, 16:00 Uhr, schrieb Denis Shelomovskij  
<verylonglogin.reg at gmail.com>:

> The second dmd issue (that was discovered because of 99.00% of zeros) is  
> that _it doesn't use bss section_.
> Lets look at the C++ program built using Microsoft's cl:
> ---
> char arr[1024 * 1024 * 10];
> void main() { }
> ---
> It resultis in ~10KiB executable, because `arr` is initialized with zero  
> bytes and put in bss section. If one of its elements is set to non-zero:
> ---
> char arr[1024 * 1024 * 10] = { 1 };
> void main() { }
> ---
> The array can't be in .bss any more and resulting executable size will  
> be increased by adding ~10MiB. The following D program results in ~10MiB  
> executable:
> ---
> ubyte[1024 * 1024 * 10] arr;
> void main() { }
> ---
> So, if there really is a reason not to use .bss, it should be clearly  
> explained.
>
>
>
> If described issues aren't much more significant than "static this()",  
> show me where am I wrong, please.

+1. I didn't know about .bss, but static arrays of zeroes (global, struct,  
class) increasing the executable size looked like a problem wanting a  
solution. I hope it is easy to solve for dmd and is just an unimportant  
issue, so was never implemented.


More information about the Digitalmars-d mailing list