[fpc-devel] FPC memory manager and OS/2 - heap sub-allocation

runewalsh rrunewalsh at gmail.com
Sat Jun 27 18:26:19 CEST 2026


— Google search doesn’t seem to back that up: they say that DosAllocMem 
is only limited by the address space (?).

— The compiler started eating noticeably more memory after some change 
related to ctask.pas; that might be the culprit. For another data point 
(and the exact ctask.pas commit): 
https://gitlab.com/freepascal.org/fpc/source/-/work_items/41670.

— Does -dLEGACYHEAP help you? :) If anything, it *increases* the number 
of OS allocations (4× asymptotically).

— OS allocations are roughly RoundUp(min(used memory div 16, 
GrowHeapSize2), 64 KB). The default GrowHeapSize2 is 1 MB, which kicks 
in after ≈50 such allocations. You can tweak GrowHeapSize2 to some 
extent (this ability was inherited from oldheap.inc and doesn’t seem 
useful; I’ve even considered removing it entirely). OS allocations start 
at a natural minimum of 64 KB, which is not configurable; the idea is 
that programs and especially threads can be tiny, in which case they 
benefit from fitting everything into one, or a few, 64 KB OS chunks.

— Second commit of 
https://gitlab.com/freepascal.org/fpc/source/-/merge_requests/1498 
should slightly improve the situation through a dedicated design for 
32-bit sizes that leverages 8-byte alignment.


More information about the fpc-devel mailing list