List all live malloc'd blocks, with their size in bytes

Benoit Jacob jacob.benoit.1 at gmail.com
Wed Jul 25 14:55:22 PDT 2012


2012/7/25 Jason Evans <jasone at canonware.com>:
> On Jul 24, 2012, at 6:47 PM, Benoit Jacob wrote:
>> I would like to know if jemalloc 3.0 is able to give a list of all
>> currently live blocks, with their exact address and size.
>>
>> By "live block" I mean something that has been returned by malloc (or
>> realloc, etc) and not yet free'd.
>>
>> If that is not possible, is there a "right way" to do so as a local
>> patch to my version of jemalloc (with no particular aim at upstreaming
>> this), or should I simply just instrument the malloc, free, etc.
>> functions?
>
> jemalloc 3 doesn't maintain the data structures necessary to iterate over live blocks, though it would be possible if arenas kept track of all associated chunks so that the chunks could be iterated over.  Several years ago jemalloc had this ability, but I removed it because iteration was quite difficult to safely use (no allocation allowed), and the extra data structure overhead didn't seem warranted, given that the functionality was almost never used.
>
> Thread caches throw a monkey wrench in things, because from the perspective of arena data structures, cached blocks are allocated.  Therefore, it would be necessary to somehow cancel out the effects of caching, by disabling caching, flushing caches before iteration, or masking the cached blocks during iteration.

Thanks for the reply. Based on it, I understand that the better
approach for me is to just instrument the user-facing malloc, free,
etc. functions to allocate bigger blocks and store linked list
pointers in the extra allocated space, to maintain a linked list of
blocks. Let me know if for some reason that idea is bad ;-)

Benoit

>
> Jason



More information about the jemalloc-discuss mailing list