glibc 内存管理

 

malloc

 

glibc 内存管理_第1张图片

chunk:该 Allocated chunk 的起始地址

mem:该 Allocated chunk 中用户可用区域的起始地址(= chunk + sizeof(malloc_chunk)

next_chunk:下一个 chunk(无论类型)的起始地址

 

prev_size:若上一个 chunk 可用,则此字段赋值为上一个 chunk 的大小;否则,此字段被用来存储上一个 chunk 的用户数据;

size:此字段赋值本 chunk 的大小,其最后三位包含标志信息:

PREV_INUSE § – 置「1」表示上个 chunk 被分配;

IS_MMAPPED (M) – 置「1」表示这个 chunk 是通过 mmap 申请的(较大的内存);

NON_MAIN_ARENA (N) – 置「1」表示这个 chunk 属于一个 thread arena

 

free

glibc 内存管理_第2张图片

fd: Forward pointer —— 本字段指向同一 bin 中的下个 free chunkfree chunk 链表的前驱指针);

bk: Backward pointer —— 本字段指向同一 bin 中的上个 free chunkfree chunk 链表的后继指针)。

 

binlist是空闲列表数据结构。它们用以保存 free chunks。根据其中 chunk 的大小,bins 被分为如下几种类型:

Fast bin;

Unsorted bin;

Small bin;

Large bin.

你可能感兴趣的:(C)