Hello,

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.

Olivier
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to