接上一篇文章:「C语言内存分配函数void* malloc(size_t size)的实际分配情况」。
先回忆一下,上一篇文章里总结的 void* malloc(sizt_t size) 实际分配了多大的内存块:
-
成功分配到的内存块的大小「chunk size」是 8 字节的整数倍。
-
分配到的内存块空间里,包括两部分:(1)用户或代码可用的空间,(2)overhead信息。
-
分配到的内存块的大小,除了受上述(1)(2)的约束,还受(3)Alignment「对齐」的约束,而Alignment「对齐」的要求是「 向 2 × sizeof(sizt_t) 」靠拢。
-
具体到我的 64-bit操作系统、size_t (64-bit OS默认为long unsigned int)为8 字节,分配到的最小的内存块是32个字节。
-
在我的机器上,非最小内存块的大小是 32 + 2 × sizeof(size_t) × n = 32 + 2 × 8 × n = 32 + 16 × n 个字节,其中 n 为 大于等于 0 的整数 。
-
overhead 信息占用 sizeof(size_t) 个字节,在我的机器上,是 8 个字节。
-
通过 gdb 查看 malloc() 分配的多个内存块「chunk」的状态&