mi-malloc 1.8/2.1
 
正在加载...
正在搜索...
无匹配项
堆自省

在运行时检查堆。更多...

数据结构

结构  mi_heap_area_t
 堆空间的一个区域包含单一大小的块。更多...
 

类型定义

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)
 传递给mi_heap_visit_blocks()的访问器函数
 

函数

bool mi_heap_contains_block (mi_heap_t *heap, const void *p)
 堆是否包含指向先前分配的块的指针?
 
bool mi_heap_check_owned (mi_heap_t *heap, const void *p)
 安全检查任何指针是否属于堆。
 
bool mi_check_owned (const void *p)
 安全检查任何指针是否属于此线程的默认堆。
 
bool mi_heap_visit_blocks (const mi_heap_t *heap, bool visit_all_blocks, mi_block_visit_fun *visitor, void *arg)
 访问堆中的所有区域和块。
 
bool mi_abandoned_visit_blocks (mi_subproc_id_t subproc_id, int heap_tag, bool visit_blocks, mi_block_visit_fun *visitor, void *arg)
 访问废弃堆中的所有区域和块。
 

详细描述

在运行时检查堆。


数据结构文档

◆ mi_heap_area_t

struct mi_heap_area_t

堆空间的一个区域包含单一大小的块。

已释放块中的字节为`committed - used`。

数据字段
size_t block_size 一个块的字节大小
void * blocks 包含堆块的区域的起始
size_t committed 此区域当前已提交的字节数
size_t full_block_size 包含填充和元数据的完整块的字节大小。
int heap_tag 与此区域关联的堆标签(参见mi_heap_new_ex
size_t reserved 为此区域保留的字节数
size_t used 已分配块使用的字节数

类型定义文档

◆ 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)

传递给mi_heap_visit_blocks()的访问器函数

返回
true表示正常,false表示停止访问(即中断)

此函数总是首先为每个区域调用,其中blockNULL指针。如果visit_all_blockstrue,则该函数将为该区域中的每个已分配块调用。

函数文档

◆ mi_abandoned_visit_blocks()

bool mi_abandoned_visit_blocks ( mi_subproc_id_t subproc_id,
int heap_tag,
bool visit_blocks,
mi_block_visit_fun * visitor,
void * arg )

访问废弃堆中的所有区域和块。

参数
subproc_id与废弃堆关联的子进程ID。
heap_tag仅访问具有指定堆标签的废弃内存,使用-1访问所有废弃内存。
visit_blocks如果为true,则访问所有已分配的块,否则visitor仅针对每个堆区域调用。
visitor此函数为堆中的每个区域调用(blockNULL)。如果visit_all_blockstruevisitor也为每个区域中每个已分配的块调用(`block!=NULL`)。从此函数返回false可提前停止访问。
arg传递给visitor的额外参数。
返回
如果所有区域和块都已访问,则为true

注意:需要在程序开始时设置选项`mi_option_visit_abandoned`。

◆ mi_check_owned()

bool mi_check_owned ( const void * p)

安全检查任何指针是否属于此线程的默认堆。

参数
p任何指针——不要求先前由我们分配。
返回
如果p指向此线程默认堆中的一个块,则为true

注意:昂贵的函数,与堆中的页数呈线性关系。

另请参见
mi_heap_contains_block()
mi_heap_get_default()

◆ mi_heap_check_owned()

bool mi_heap_check_owned ( mi_heap_t * heap,
const void * p )

安全检查任何指针是否属于堆。

参数
heap堆。
p任何指针——不要求先前由我们分配。
返回
如果p指向heap中的一个块,则为true

注意:昂贵的函数,与堆中的页数呈线性关系。

另请参见
mi_heap_contains_block()
mi_heap_get_default()

◆ mi_heap_contains_block()

bool mi_heap_contains_block ( mi_heap_t * heap,
const void * p )

堆是否包含指向先前分配的块的指针?

参数
heap堆。
p指向先前分配的块(在任何堆中)的指针——不能是随机指针!
返回
如果p指向的块在heap中,则为true
另请参见
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 )

访问堆中的所有区域和块。

参数
heap要访问的堆。
visit_all_blocks如果为true,则访问所有已分配的块,否则visitor仅针对每个堆区域调用。
visitor此函数为堆中的每个区域调用(blockNULL)。如果visit_all_blockstruevisitor也为每个区域中每个已分配的块调用(`block!=NULL`)。从此函数返回false可提前停止访问。
arg传递给visitor的额外参数。
返回
如果所有区域和块都已访问,则为true