如何在C中跟踪动态分配的内存

Aru*_*mar 6 c memory

我们使用malloc()在C中动态分配内存,并且我们收到指向堆中位置的指针.现在我们使用free()来释放内存,传递与argumnet相同的指针值.

现在的问题是free()如何知道取消分配多少...考虑到我们总是可以调整malloc()分配的内存块的事实.

这里有什么与哈希表相关的东西吗?

Vau*_*ato 5

典型的实现将在malloc返回的地址之前存储信息.该信息将包括重新分配或免费需要知道的信息以进行其工作,但具体存储的详细信息取决于实施.


Dig*_*oss 4

最初的技术是分配一个稍大的块并在开始时存储大小,这是应用程序看不到的部分。额外的空间保存一定的大小,并可能链接到将空闲块连接在一起以供重用。

然而,这些技巧存在某些问题,例如缓存和内存管理行为不佳。在块中直接使用内存往往会不必要地分页,并且还会创建脏页,从而使共享和写时复制变得复杂。

所以更先进的技术是保留一个单独的目录。还开发了一些特殊的方法,其中内存区域使用相同的二次方大小。

一般来说,答案是:分配一个单独的数据结构来保存状态。

  • 最后存储大小将是一种极其无效的策略。我不认为 http://en.wikipedia.org/wiki/Buddy_memory_allocation 是“异国情调”。 (3认同)