2014-07-01 176 views
-1

我用C库malloc来分配8MB内存,使用那个内存后我用free来释放内存8MBMalloc分配相同的内存块

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

如何避免这个问题,为什么会发生这种情况?

编辑:我实现一个工具来测试主内存,如果malloc分配的内存块一样,不可能检查整个存储

+3

是什么让你觉得这是一个问题? – John3136

+0

是什么让你觉得这是一个问题?你有没有阅读“免费”的文件? –

+0

请解释为什么这是一个问题。如果你释放内存,你不应该挂在任何指向它的指针上。 –

回答

4

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

停止malloc返回块的唯一可靠方法是停止释放它们。当然,这不是很实际。

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

您的测试主内存的工具不能用malloc或任何用户模式程序来实现。现代操作系统不允许您访问物理内存。而是他们呈现虚拟化的内存视图。程序中的地址不是物理地址,而是虚拟地址。测试物理内存要求您的入门级别远低于用户模式程序所能达到的级别。

+0

然后会出现大量未使用的内存 – Nikhilendra

+1

对不起,您的意思是? –

+0

只有当'malloc'分配的内存被释放时,它才能被其他程序使用 – Nikhilendra

0

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

您可能需要调用system()从代码运行几个linux命令(它提供详细的内存管理选项)。主存储器管理无法使用malloc/free进行/测试,它们仅限于在在程序运行时分配给你的程序的内存。

+0

这是怎么发生的 – Nikhilendra