Modern Linux memory management
Ori Berger
linux-il at orib.net
Thu Jan 26 17:54:56 IST 2012
On 01/26/2012 10:16 AM, Baruch Siach wrote:
>> Only by using valgrind, that I could find the exact location and figure
>> out, that it was another function that had the problem.
>>
>> How does the modern memory management system is working then, that it takes
>> so much time for the problem to surface ?
>
> Now, if you corrupt the internal glibc data structure, glibc won't notice
> until you try to call one of malloc(), free(), etc.
And in addition to what Baruch said:
Valgrind will always catch these errors, but will result in significant
slowdown (x10-x20). There are tools like DUMA (and its earlier
incarnation, Electric Fence) incur almost no CPU overhead and can detect
many kinds of corruptions as soon as they happen, by using the memory
management units.
(Because of the MMU granularity, you need to run your program twice -
one in which allocations are aligned to the lower address, and one when
they are aligned to the top address)
There is also a middle ground; gcc's mudflap
<http://www.stlinux.com/devel/debug/mudflap> and -- if your program is
pure C and can be compiled by tcc,
<http://bellard.org/tcc/tcc-doc.html#SEC21>; These are comparable to
valgrind in functionality (for code you compile with them; standard
library code runs at full speed/unchecked), but usually only introduce a
small slowdown (10% or so).
More information about the Linux-il
mailing list