Am 07.01.2024 um 11:39 schrieb Michael Van Canneyt via fpc-pascal:


On Sun, 7 Jan 2024, Sven Barth via fpc-pascal wrote:

Am 07.01.2024 um 10:01 schrieb Florian Klämpfl via fpc-pascal:


Am 06.01.2024 um 20:05 schrieb Matthew Phillips via fpc-pascal <fpc-pascal@lists.freepascal.org>:

I compiled the Hello World program from the docs and noticed that it's
435k. Compared to a lot of newer languages, like Golang, that's not bad
at all.

I then compiled the equivalent C program with gcc which came out at
33k. So I'm just curious, where does the difference comes from?
Could it be that fpc is including some parts that are not being used in
this simple of a program or is more going on?

https://wiki.freepascal.org/Size_Matters

To underline this with some numbers (I assume you mean the demo/text/hello.pp which only contains a mere "Writeln('Hello World')" and no additional units; all tests on x86_64-linux with 3.3.1):

- FPC compiled as is: 388976 B
- FPC compiled with full smartlinking: 55920 B
- FPC compiled with C linkage: 388760 B
- FPC compiled with full smartlinking and C linkage: 56792 B

Maybe it is a good idea to add these numbers to the above WIKI page, to quantify
the discussion and to illustrate what the effect is of various options.

Probably... 🤷‍♀️

And just for the fun of it, the size if the RTL is compiled into a dynamic package and that is used:

- no smartlinking: 15784 B
- with smartlinking: 15608 B

With the librtl.so having a size of 649912 B which will ammortize itself if multiple applications use dynamic packages.

I think we should also explain why linking to C has almost no effect on actual binary size.

That's mainly because the functions that differ between FPC_USE_LIBC and not are rather slim syscalls anyway, so the main bunch of Pascal code is still the same in both cases.

Regards,
Sven
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to