[fpc-devel] RTL: high CPU load in heap manager
Adriaan van Os
fpc at microbizz.nl
Tue Nov 11 10:28:16 CET 2014
Jonas Maebe wrote:
> On 10/11/14 18:47, Karoly Balogh (Charlie/SGR) wrote:
>> We were profiling our code, and one RTL function regularly popped up in
>> close to the top in the profiling list.
>>
>> It's remove_freed_fixed_chunks(). Can someone explain to me under what
>> condition this code is triggered very often and/or could take long to
>> execute (there's a loop in there)?
>
> This was reported earlier too, but I couldn't reproduce it:
> http://bugs.freepascal.org/view.php?id=18079 (especially comment 47405
> by Sergei).
I suggest to use cmem and compare the results.
I will also note that malloc uses mremap <http://man7.org/linux/man-pages/man2/mremap.2.html> on
Linux only, rather than physically moving bytes around. This makes a very efficient realloc
possible (on Linux only).
The Mach kernel of Mac OS X has vm_remap, but Apple is not smart enough to use it (as of OS X
10.8.5, the source code for malloc in OS X 10.9 is unknown).
Windows neither has a mremap nor a realloc, which implies that on every resize a new block has to
be allocated, with all bytes physically moved to the new location, see
<http://www.mgroeber.de/misc/windows_heap.html>. This makes realloc on Windows (with the system
heap manager) extremely ineffcient.
Regards,
Adriaan van Os
More information about the fpc-devel
mailing list