D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 7921 - Two order of magnitude file size increase (up to 111 MiB for GtkD) mostly from zeroes
Summary: Two order of magnitude file size increase (up to 111 MiB for GtkD) mostly fro...
Status: RESOLVED FIXED
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D2
Hardware: All All
: P2 major
Assignee: No Owner
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-04-16 05:25 UTC by Denis Shelomovskii
Modified: 2012-04-17 02:07 UTC (History)
2 users (show)

See Also:


Attachments
Example with gtkD (1.57 KB, application/octet-stream)
2012-04-16 05:31 UTC, Denis Shelomovskii
Details
Example with GtkD (1.67 KB, application/octet-stream)
2012-04-17 01:54 UTC, Denis Shelomovskii
Details

Note You need to log in before you can comment on or make changes to this issue.
Description Denis Shelomovskii 2012-04-16 05:25:32 UTC
An example:

GtkD is built using singe (gtk-one-obj.lib) or separate (one per source 
file) object files (gtk-sep-obj.lib).

Than main.d that imports gtk.Main is built using those libraries.

Than zeroCount utils is built and launched over resulting files:
--------------------------------------------------
   Zero bytes|     %|    Non-zero| Total bytes|        File
      3628311| 21.56|    13202153|    16830464|gtk-one-obj.lib
      1953124| 15.98|    10272924|    12226048|gtk-sep-obj.lib
    127968798| 99.00|     1298430|   129267228|main-one-obj.exe
       743821| 37.51|     1239183|     1983004|main-sep-obj.exe
--------------------------------------------------

These zero byte counts are similar for dmd 2.054-2.057.

So one has to use very slow per-file build to produce a good (not 100 
MiB) executable.
No matter what *.exe is launched, its process allocates ~20 MiB of RAM 
(loaded Gtk dll-s).

See also:
"Building GtkD app on Win32 results in 111 MiB file mostly from zeroes" thread:
http://www.digitalmars.com/d/archives/digitalmars/D/Building_GtkD_app_on_Win32_results_in_111_MiB_file_mostly_from_zeroes_141758.html

A post in "Program size, linking matter, and static this()" thread:
http://www.digitalmars.com/d/archives/digitalmars/D/Program_size_linking_matter_and_static_this_152387.html#N152875
Comment 1 Denis Shelomovskii 2012-04-16 05:27:26 UTC
This issue is fixed in dmd 2.058.
But no information about its source is given.
Comment 2 Denis Shelomovskii 2012-04-16 05:31:20 UTC
Created attachment 1091 [details]
Example with gtkD
Comment 3 Walter Bright 2012-04-16 14:24:17 UTC
Make sure first that it is not this issue:

http://dlang.org/faq.html#bss
Comment 4 Denis Shelomovskii 2012-04-17 00:09:30 UTC
(In reply to comment #3)
> Make sure first that it is not this issue:
> 
> http://dlang.org/faq.html#bss

AFAIK there was no changes with BSS in dmd 2.058. And GtkD doesn't use __gshared arrays at all.
Comment 5 Vladimir Panteleev 2012-04-17 00:18:30 UTC
Have you looked at the map file?

If not, try my map treemap visualization tool:
http://thecybershadow.net/d/mapview/
Comment 6 Denis Shelomovskii 2012-04-17 01:54:37 UTC
Created attachment 1093 [details]
Example with GtkD
Comment 7 Denis Shelomovskii 2012-04-17 02:07:46 UTC
The example with built binaries for dmd 2.057 and dmd 2.058 (~10 MiB, uncompressed ~250 MiB):
http://deoma-cmd.ru/files/other/huge-build-gtkD-full.7z

One can use Vladimir Panteleev's treemap visualization tool with *.map files from the archive (as for me, it hangs Chrome).