我有两个相关的问题,因此在这个单一的线程中提出。
问题1:如何确认我的操作系统是否会自动清除未释放(使用malloc分配的)内存 when a program terminates?我使用gcc-4.5.2的Ubuntu 11.04(32位)
根据Steven Summit的教程页面(在这里),"释放未使用的内存(malloc'ed)是一个好主意,但这不是强制性的。当您的程序退出时,它分配但未释放的任何内存应该自动释放。如果您的计算机由于您的程序忘记释放而某种方式“丢失”内存,那就说明您的操作系统存在问题或缺陷。"
问题2:假设foo.c mallocs了B字节的内存。稍后,foo.c释放了这些B字节的内存位置并将其返回给操作系统。现在我的问题是,那些特定的B字节内存位置能否在当前实例中被重新分配给foo.c(由操作系统)或者直到其当前实例终止才能将这些B字节分配给foo.c?
编辑:我建议每个阅读我的问题的人都去阅读类似问题的答案在这里和在这里。这两个答案都详细解释了malloc()和free()的交互和工作,而不使用非常晦涩的术语。要了解内核使用的内存管理工具(例如brk(),mmap())和C编译器使用的内存管理工具(例如malloc(),free())之间的区别,请务必阅读this。