Malloc分配相同的内存块

时间:2014-07-01 05:39:28

标签: c memory-management malloc

我使用C库malloc来分配8MB内存,在使用该内存后我使用free来释放8MB内存。

但是当我再次使用malloc来分配8MB内存时,它会分配与之前分配的位置相同的位置。

如何避免此问题以及为什么会发生这种情况?

编辑:我正在实现一个测试主内存的工具,如果malloc分配相同的内存块,则无法检查整个内存

2 个答案:

答案 0 :(得分:4)

这本身并不是问题,而是设计上的问题。出于性能原因,malloc的典型实现将回收内存块。在任何情况下,由于malloc从有限的值池中返回地址,因此无法保证不回收块。

停止之前返回的malloc返回块的唯一确定的方法是停止释放它们。当然,这不太实际。

  

我正在实施一个测试主内存的工具。如果malloc分配相同的内存块,则无法检查整个内存。

使用malloc或任何用户模式程序无法实现测试主内存的工具。现代操作系统无法访问物理内存。相反,它们呈现了虚拟化的内存视图。程序中的地址不是物理地址,而是虚拟地址。测试物理内存需要您进入比用户模式程序低得多的水平。

答案 1 :(得分:0)

这应该对你有所帮助 How malloc works? 为了防止这种情况,使用malloc / calloc分配几个字节,然后释放更大的内存块。 BTW这不是一个错误的行为来获得相同的内存地址。

您可能希望调用system()从您的代码中运行一些linux命令(提供详细的内存管理选项)。使用malloc / free无法完成/测试主内存管理,它们仅限于在内存上运行在程序运行时分配给你的程序。