[fpc-pascal] Memory Size

Jonas Maebe jonas.maebe at elis.ugent.be
Sun Apr 5 11:06:55 CEST 2009


On 04 Apr 2009, at 20:47, Markus Glugla wrote:

> But, if I allocate 2GB memory the program crashs with an access
> violation. I have read that fpc can handle arrays up to a size of 2GB,
> isn't? How great can be an array?


First of all, you set the global system unit variable  
'ReturnNilIfGrowHeapFails' to true, so that instead of a run time  
error (or exception) you will simply get nil if a memory allocation  
fails.

Secondly, not being able to allocate an array of 2GB is unrelated to  
FPC, but due to the fact that you are (most likely) working on a 32  
bit OS. While the theoretical maximum limit for 32 bit systems is 4GB,  
it is impossible to ever allocate that much memory in a s single block.

The reason is that while your program runs in its own virtual memory  
space, it is not the only thing in that space. The kernel usually  
takes part of the memory (512MB to 1GB), your program code, data and  
stack take part of it (and not contiguously; e.g., the code and data  
usually start somewhere around address 0x804000, while the stack  
starts at 0xC0000000 and grows downwards from there), and then there  
are shared libraries which can be mapped all over the place.

As a result, the virtual memory space is fragmented already right  
after your program starts, and on most 32 bit systems you seldom can  
allocate more than 1.5GB of contiguous memory (simply because other  
things are in the way otherwise), and sometimes even less.


Jonas



More information about the fpc-pascal mailing list