glibc中malloc_chunk结构体bk成员的缩写含义咨询
glibc malloc_chunk中bk成员的缩写含义
嘿,刚好对glibc的malloc实现比较熟,来给你说清楚——bk是back的缩写,和fd(forward的缩写)对应,是双向链表结构里的后向指针。
从你给出的malloc_chunk结构体定义也能直观看到它的作用:
struct malloc_chunk { INTERNAL_SIZE_T mchunk_prev_size; /* Size of previous chunk (if free). */ INTERNAL_SIZE_T mchunk_size; /* Size in bytes, including overhead. */ struct malloc_chunk* fd; /* double links -- used only if free. */ struct malloc_chunk* bk; /* Only used for large blocks: pointer to next larger size. */ struct malloc_chunk* fd_nextsize; /* double links -- used only if free. */ struct malloc_chunk* bk_nextsize; };
当内存块(chunk)处于空闲状态时,fd会指向链表中的下一个空闲chunk,而bk则指向上一个空闲chunk,这对指针配合起来,就能让malloc高效地在空闲链表中完成遍历、插入或删除操作。哪怕是针对大内存块的特殊场景,bk的核心缩写含义依然是back,只是功能上延伸为指向更大尺寸的块而已。
内容的提问来源于stack exchange,提问作者Halkichi




