在C中退出程序时释放所需的内存

SIM*_*MEL 21 c malloc free memory-management

如果我在我的C程序中使用分配内存,malloc现在我想退出,我是否必须释放分配的内存,或者我可以假设,因为我的整个程序终止,它将被操作系统释放?

我在Linux环境中运行.

Bla*_*iev 21

任何现代操作系统都会在进程终止后清理所有内容,但依靠这一点通常不是一个好习惯.

这取决于你正在编写的程序.如果它只是一个快速运行和终止的命令行工具,您可能不会打扰清理.但请注意,正是这种心态导致守护进程和长时间运行程序中的内存泄漏.

  • 我完全明白你的意思,但我不同意“当我的进程退出时不清理内存”的心态会导致长时间运行的程序泄漏。无论它运行多长时间,操作系统都会在退出时将其清理干净。“懒惰清理”肯定会导致内存泄漏,但这不是问题。不释放内存的决定应该是有意识的和深思熟虑的。 (2认同)

Zan*_*ynx 9

它可以是一个很好的设计,非常有效,只需退出并允许操作系统清理所有内容.默认情况下,Apple OS X会执行此操作:除非应用程序设置"不要杀我"标记,否则应用程序将被杀死,恕不另行通知.

通常,释放每个内存分配需要很长时间.某些内存页可能已被换出,必须重新读回,以便将它们标记为空闲.内存分配器必须做很多工作来更新可用内存跟踪数据.所有这些努力都是浪费,因为该计划正在退出.

但这必须通过设计来完成,而不是因为程序员已经忘记了已分配的内存!