[fpc-pascal] Memory Size
Markus Glugla
fpc at xgelb.de
Sun Apr 5 16:08:45 CEST 2009
Hi Jonas,
> 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.
This is a very good tip! I have read about 'ReturnNilIfGrowHeapFails'
but I forget it. I think, it is a good solution for my problem.
> 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.
Yes, it finally sunk in. I see clearlier the context of memomry
management. Thanks.
> 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.
Ok, thats new for me. It is very interesting.
> 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.
My experience with the topic coincides with your sentences.
Finally, I think i understand some thinks better. Including with your
first very good tip, I can fix the problem.
Thank you, Jonas, for your help.
Also Thank's to Marco.
Bye, Markus
More information about the fpc-pascal
mailing list