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