struct listblock
{
struct listblock*next;
struct listnode*head;
int countNode;
}
作者说分配它的单个节点将花费(12个字节+ 8个字节的开销)我不明白这8个字节的开销是什么意思,他是如何计算的?
答案 0 :(得分:3)
当您在之前free
编辑的对象上调用malloc
时,内存管理系统需要执行一些“记账”以添加您要返回的内存块。未分配的内存池。具体来说,它需要知道您请求的块数有多大,以便在可能的情况下它可以realloc
进入同一个块。实际数据特定于malloc
的实现,但它通常包含指向动态分配器管理的其他内存块的链接。
簿记数据必须存储在malloc
返回给您的每个内存块的某处。它可以存储在返回给您的内存块中,也可以存储在内存分配器已知的单独位置,但至少有两个数字代表请求和分配的大小。
Where Do malloc()
/ free()
Store Allocated Sizes and Addresses?
这就是作者所谓的开销:当你请求12个字节时,系统会给你12个字节,并且还会耗尽两个4字节的块(块的大小和a链接到下一个块)用于自己的簿记,总共20个字节。