mi-malloc  1.4
Heap Introspection

Inspect the heap at runtime. More...

Data Structures

struct  mi_heap_area_t
 An area of heap space contains blocks of a single size. More...
 

Typedefs

typedef bool() mi_block_visit_fun(const mi_heap_t *heap, const mi_heap_area_t *area, void *block, size_t block_size, void *arg)
 Visitor function passed to mi_heap_visit_blocks() More...
 

Functions

bool mi_heap_contains_block (mi_heap_t *heap, const void *p)
 Does a heap contain a pointer to a previously allocated block? More...
 
bool mi_heap_check_owned (mi_heap_t *heap, const void *p)
 Check safely if any pointer is part of a heap. More...
 
bool mi_check_owned (const void *p)
 Check safely if any pointer is part of the default heap of this thread. More...
 
bool mi_heap_visit_blocks (const mi_heap_t *heap, bool visit_all_blocks, mi_block_visit_fun *visitor, void *arg)
 Visit all areas and blocks in a heap. More...
 

Detailed Description

Inspect the heap at runtime.


Data Structure Documentation

◆ mi_heap_area_t

struct mi_heap_area_t

An area of heap space contains blocks of a single size.

The bytes in freed blocks are committed - used.

Data Fields
size_t block_size size in bytes of one block
void * blocks start of the area containing heap blocks
size_t committed current committed bytes of this area
size_t reserved bytes reserved for this area
size_t used bytes in use by allocated blocks

Typedef Documentation

◆ mi_block_visit_fun

typedef bool() mi_block_visit_fun(const mi_heap_t *heap, const mi_heap_area_t *area, void *block, size_t block_size, void *arg)

Visitor function passed to mi_heap_visit_blocks()

Returns
true if ok, false to stop visiting (i.e. break)

This function is always first called for every area with block as a NULL pointer. If visit_all_blocks was true, the function is then called for every allocated block in that area.

Function Documentation

◆ mi_check_owned()

bool mi_check_owned ( const void *  p)

Check safely if any pointer is part of the default heap of this thread.

Parameters
pAny pointer – not required to be previously allocated by us.
Returns
true if p points to a block in default heap of this thread.

Note: expensive function, linear in the pages in the heap.

See also
mi_heap_contains_block()
mi_heap_get_default()

◆ mi_heap_check_owned()

bool mi_heap_check_owned ( mi_heap_t heap,
const void *  p 
)

Check safely if any pointer is part of a heap.

Parameters
heapThe heap.
pAny pointer – not required to be previously allocated by us.
Returns
true if p points to a block in heap.

Note: expensive function, linear in the pages in the heap.

See also
mi_heap_contains_block()
mi_heap_get_default()

◆ mi_heap_contains_block()

bool mi_heap_contains_block ( mi_heap_t heap,
const void *  p 
)

Does a heap contain a pointer to a previously allocated block?

Parameters
heapThe heap.
pPointer to a previously allocated block (in any heap)– cannot be some random pointer!
Returns
true if the block pointed to by p is in the heap.
See also
mi_heap_check_owned()

◆ mi_heap_visit_blocks()

bool mi_heap_visit_blocks ( const mi_heap_t heap,
bool  visit_all_blocks,
mi_block_visit_fun visitor,
void *  arg 
)

Visit all areas and blocks in a heap.

Parameters
heapThe heap to visit.
visit_all_blocksIf true visits all allocated blocks, otherwise visitor is only called for every heap area.
visitorThis function is called for every area in the heap (with block as NULL). If visit_all_blocks is true, visitor is also called for every allocated block in every area (with block!=NULL). return false from this function to stop visiting early.
argExtra argument passed to visitor.
Returns
true if all areas and blocks were visited.