我使用C库malloc
来分配8MB
内存,在使用该内存后我使用free
来释放8MB
内存。
但是当我再次使用malloc
来分配8MB
内存时,它会分配与之前分配的位置相同的位置。
如何避免此问题以及为什么会发生这种情况?
编辑:我正在实现一个测试主内存的工具,如果malloc
分配相同的内存块,则无法检查整个内存
答案 0 :(得分:4)
这本身并不是问题,而是设计上的问题。出于性能原因,malloc的典型实现将回收内存块。在任何情况下,由于malloc从有限的值池中返回地址,因此无法保证不回收块。
停止之前返回的malloc返回块的唯一确定的方法是停止释放它们。当然,这不太实际。
我正在实施一个测试主内存的工具。如果malloc分配相同的内存块,则无法检查整个内存。
使用malloc或任何用户模式程序无法实现测试主内存的工具。现代操作系统无法访问物理内存。相反,它们呈现了虚拟化的内存视图。程序中的地址不是物理地址,而是虚拟地址。测试物理内存需要您进入比用户模式程序低得多的水平。
答案 1 :(得分:0)
这应该对你有所帮助 How malloc works? 为了防止这种情况,使用malloc / calloc分配几个字节,然后释放更大的内存块。 BTW这不是一个错误的行为来获得相同的内存地址。
您可能希望调用system()从您的代码中运行一些linux命令(提供详细的内存管理选项)。使用malloc / free无法完成/测试主内存管理,它们仅限于在内存上运行在程序运行时分配给你的程序。