程序终止后动态分配内存

当包含动态分配的内存(使用malloc / new)而没有释放/删除调用的C / C ++程序终止时,会发生什么动态分配的内存? 操作系统是否收回内存或者该内存是否无法被其他程序访问?


我认为语言标准没有任何保证,但支持稀疏虚拟内存和内存保护的现代操作系统(如MacOS X,Linux,所有最新版本的Windows以及所有当前制造的电话手持设备)都会自动清理在严重行为的进程(当它们终止时)之后启动并释放内存。 但是只要程序正在运行,内存仍然不可用。

如果您正在使用微控制器进行编程,请在MacOS 9或更高版本,DOS或Windows 3.x上进行编程,那么您可能需要关注内存泄漏,从而导致整个操作系统无法使用内存。


大多数现代操作系统都使用内存管理器,所有用户态进程只能看到所谓的虚拟内存,这与程序可以检查的实际系统内存无关。 这意味着程序不能简单地读取另一个进程的内存或内核内存。 这也意味着当进程终止时,内存管理器将完全“释放”已经分配给进程的所有内存,以便程序内的内存泄漏通常不会“影响”系统的其他部分(除了可能强制大量的磁盘交换以及可能存在的一些“内存不足”行为)。

这并不意味着以任何方式轻松地对待内存泄漏,它只意味着没有一个单一的程序可以随意地破坏现代多任务操作系统上的其他进程(当然,尽管存在滥用管理权限)。


简短的回答:是的,操作系统将释放此内存。

大部分操作系统都会释放这些内存,但依赖这种行为是不好的做法。 某些操作系统不会释放该内存。 例如,嵌入式系统。 为便于携带,请始终释放您分配的所有内存。

链接地址: http://www.djcxy.com/p/78715.html

上一篇: dynamically allocated memory after program termination

下一篇: What is memory fragmentation?