[fpc-pascal] Executable size compiler 1.96 vs 1.06

Peter Vreman peter at freepascal.org
Tue May 17 08:20:51 CEST 2005

> With compiler version 1.96, one of my command line applications is 1MB
> (win32)
> With the 1.0.6 compiler (using dev pascal) it is just 100KB. (win32)
> On linux, 1.96 the application was about 300KB.
> (not so worried about linux, since this is not consistent
> testing..comparing two OS's)
> What is the major reason for the different sizes?  The application I'm
> testing uses the same compiler command
> line arguments. The application calls on the synregexpr unit (which calls
> for the classes unit). I'm guessing
> the classes unit maybe has something to do with the size addition. But how
> come 100KB to 1MB? This reminds me
> of when I first started using lazarus and comparing to Delphi, or when I
> first started using KOL vs VCL in
> Delphi ;-)
> Before I go digging into the sources spending hours figuring out the major
> code changes between the compilers,
> maybe you could just give me a summary of the major causes (the compiler
> was completely rewritten, with this
> much difference?)
> Also, if there is discussion on this in the mailing list from previous
> questioners let me know! I just want to
> know some of the  details (like it's because of more initialization
> functions? because the classes unit got
> bigger with time? code that just couldn't be smart linked in later
> compiler versions?).

Initialization of the classes and implicitly used sysutils unit uses more
code. Also the use of resourcestrings increases the binary.

The size is mainly a rtl issue. The smartlinking principle in the compiler
isn't changed since 1.0.6.

More information about the fpc-pascal mailing list