C 隐式块列表中的标题内容?

C 隐式块列表中的标题内容?,c,memory-management,malloc,C,Memory Management,Malloc,我知道,当您在堆上使用malloc()空间时,实际上需要比请求的字节更多的字节,以便为标头腾出空间并允许为对齐目的进行填充 例如,如果您调用malloc(41),您将得到48个字节——头部4个字节,然后是44个字节的用户空间 我的问题是:标题是否存储整个块的大小(在附加填充和添加标题空间后),还是只包含一个表示用户可以访问的空间大小的整数 谢谢 存储或不存储的内容完全取决于您的C库实现。无法保证您将在那里获得48个字节,或者每个分配都有一个头块。如果您想查看各种实现的功能,只需查找一下:Free

我知道,当您在堆上使用
malloc()
空间时,实际上需要比请求的字节更多的字节,以便为标头腾出空间并允许为对齐目的进行填充

例如,如果您调用
malloc(41)
,您将得到48个字节——头部4个字节,然后是44个字节的用户空间

我的问题是:标题是否存储整个块的大小(在附加填充和添加标题空间后),还是只包含一个表示用户可以访问的空间大小的整数


谢谢

存储或不存储的内容完全取决于您的C库实现。无法保证您将在那里获得48个字节,或者每个分配都有一个头块。如果您想查看各种实现的功能,只需查找一下:FreeBSD有jemalloc,Linux有“一些malloc”(不知道它是否有特殊之处),…答案“取决于”它取决于实现。通常,堆被组织为两个链表。一个链表是分配的块,另一个链表是空闲块。像malloc这样的系统功能需要知道空闲块有多大,以便确定该块中是否有足够的空间用于请求的分配。因此,到下一个块的链接和当前块的大小都可用。如果没有大小,malloc和free操作将非常困难(不是很快),需要对许多地址进行比较。