展开链接列表中的内存开销?

时间:2015-09-26 10:59:20

标签: c data-structures

struct listblock
{
  struct listblock*next;
  struct listnode*head;
  int countNode;
}

作者说分配它的单个节点将花费(12个字节+ 8个字节的开销)我不明白这8个字节的开销是什么意思,他是如何计算的?

1 个答案:

答案 0 :(得分:3)

当您在之前free编辑的对象上调用malloc时,内存管理系统需要执行一些“记账”以添加您要返回的内存块。未分配的内存池。具体来说,它需要知道您请求的块数有多大,以便在可能的情况下它可以realloc进入同一个块。实际数据特定于malloc的实现,但它通常包含指向动态分配器管理的其他内存块的链接。

簿记数据必须存储在malloc返回给您的每个内存块的某处。它可以存储在返回给您的内存块中,也可以存储在内存分配器已知的单独位置,但至少有两个数字代表请求和分配的大小。

Where Do malloc() / free() Store Allocated Sizes and Addresses?

这就是作者所谓的开销:当你请求12个字节时,系统会给你12个字节,并且还会耗尽两个4字节的块(块的大小和a链接到下一个块)用于自己的簿记,总共20个字节。