On 07/15/2010 11:14 AM, Jonas Maebe wrote:
Then please explain that paradigm, since apparently you already looked
at it.
AFAIU, they use three areas for small midrange and large chunks
Small chunks are allocated in several lists, each of which hosts equally
sized chunks, thus finding the chunks is a one-step access (no linked
lists). Thus no unification of chunks when freeing is necessary. With a
"normal" program some 98 % of the chunks are small.
Midrange Chunks are allocated in a single list of non equally sized chunks
Large chunks are allocated by a direct OS API call.
Only Midrange chunks implement "atomic" management for thread-safeness.
For large chunks, the OS does this anyway, If a conflicting access is
detected with small chunks, the second thread simply uses a midrange
chunk in that rare occasion.
-Michael
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel