Malloc分配相同的内存块
我使用C库Malloc分配相同的内存块,c,memory-management,malloc,C,Memory Management,Malloc,我使用C库malloc分配8MB内存,使用该内存后,我使用free释放8MB内存 但当我再次使用malloc分配8MB内存时,它分配的位置与之前分配的位置相同 如何避免这个问题,为什么会发生这种情况 编辑:我正在实现一个测试主内存的工具,如果malloc分配了相同的内存块,就不可能检查整个内存这本身不是问题,是设计的。由于性能原因,malloc的典型实现将回收内存块。在任何情况下,由于malloc从有限的值池返回地址,因此它无法保证不回收块 阻止malloc返回以前返回的块的唯一可靠方法是停止释
malloc
分配8MB
内存,使用该内存后,我使用free
释放8MB
内存
但当我再次使用malloc
分配8MB
内存时,它分配的位置与之前分配的位置相同
如何避免这个问题,为什么会发生这种情况
编辑:我正在实现一个测试主内存的工具,如果
malloc
分配了相同的内存块,就不可能检查整个内存这本身不是问题,是设计的。由于性能原因,malloc的典型实现将回收内存块。在任何情况下,由于malloc从有限的值池返回地址,因此它无法保证不回收块
阻止malloc返回以前返回的块的唯一可靠方法是停止释放它们。当然,这不是很实际
我正在实现一个测试主内存的工具。如果malloc分配相同的内存块,则无法检查整个内存
测试主内存的工具不能用malloc实现,也不能用任何用户模式程序实现。现代操作系统不允许您访问物理内存。相反,它们提供了一个虚拟化的内存视图。程序中的地址不是物理地址,而是虚拟地址。测试物理内存需要以比用户模式程序低得多的级别进行 这应该对你有帮助
为了防止这种情况,请使用malloc/calloc分配几个字节,然后释放较大的内存块。
顺便说一句,获取相同的内存地址不是错误的行为
您可能需要调用system()从代码中运行一些linux命令(提供详细的内存管理选项)。无法使用malloc/free完成/测试主内存管理,它们仅限于在程序运行时对分配给程序的内存进行操作。然后会有大量未使用的内存orry,你的意思是什么?只有当
malloc
分配的内存被释放后,它才能被其他程序使用。我仍然不理解这些注释。@Nikhilendra-你最后的注释表明你不理解虚拟内存。操作系统在任何时候都可以自由地将进程的内存交换到磁盘,从而释放其他进程可以使用的已占用物理内存。即使不是,每个进程都使用相同的虚拟地址空间。是什么让你认为这是一个问题?是什么让你认为这是一个问题?您是否阅读了免费的文档?请解释这是一个问题的原因。如果你释放了内存,你就不应该抓住任何指向它的指针。这是行不通的。虚拟内存分页使使用用户空间应用程序测试系统内存变得不可行-无法确保您正在测试所有内存。(事实上,一些物理内存将由内核连接,因此永远不会被应用程序测试。)在具有虚拟内存的操作系统中,即使malloc返回的地址不同,也没有理由认为它将被放置在物理内存中的不同地址中。