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