[fpc-pascal] x64 compiler and Large Address Aware flag

OBones obones at free.fr
Wed Jul 27 09:32:05 CEST 2016


We are using FPC (2.6.0) here to allow compiling our users ideas into 
runable code and while this has worked just fine until now, on one 
occasion we have reached a situation where the ppcrossx64 compiler ends 
with an EOutOfMemory exception.
Looking at its memory consumption, sure enough, it reaches 1.2G of RAM 
used and then dies with the exception.
If we rerun it with the same options, it then consumes 1G and finishes 
successfully with a valid DLL file.
The project we make it compile is made of 464 pas files, totaling 180M 
on the hard drive. Once compiled, the .o and .ppu files use 650M on the 
hard drive, while the DLL uses 124M.
Here is the command line we are using:

ppcrossx64 -Mdelphi -Fu..\units\x86_64-win64\fcl-base 
-Fu..\units\x86_64-win64\rtl -Fu..\units\precompiled1\x86_64-win64 
-Fu..\units\precompiled2\x86_64-win64 Project.dpr

I don't see any issue with the command line and the number of files does 
not seem that high to me.
As a workaround, I patched ppcrossx64.exe so that its PE header includes 
the Large Address Aware flag thus meaning it can now use up to about 3G 
of RAM instead of roughly 1.5
Once patched, I removed all .ppu and .o files and reran the same command 
line. This time it finished successfully at first run and observing it, 
it used 1.4 G of RAM at most during its execution.

I have used this flag in various projects for quite a while now and 
could not see any adverse effect, except in extreme corner cases where 
weird pointer arithmetic was used and more than 2G of RAM was in use.

Do you think it is safe to use the patched ppcrossx64 compiler?

Thanks a lot for your opinions.


More information about the fpc-pascal mailing list