【发布时间】:2021-08-07 10:54:59
【问题描述】:
所以在完成我的个人项目之前,我想到了这个问题。因此,我还想知道是否需要在进程终止之前进行任何特殊操作来进行清理(例如释放所有动态分配的内存)还是由 Linux 内核处理。
感谢任何帮助
【问题讨论】:
-
操作系统将在进程终止后回收进程分配的所有内存。但与此同时,编写尽可能多的清理代码也是一种好习惯。
-
@kaylum:在进程退出时“清理”内存是一种浪费,而且不是好的做法。当应用程序被告知要退出并花费几秒钟或更长时间做无用的工作时,它会导致延迟,这会激怒用户并在系统继续执行有用的工作时不必要地占用系统资源。当然,软件应该被设计成仔细管理它的内存,而不是不恰当地忘记它,但在终止时不需要“清理”。 (当然需要完成一些终止工作,例如刷新未写入的缓冲区。但不是释放内存。)
-
@EricPostpischil 在挑战“清理并优雅地关闭”货物崇拜时要小心,否则你会和我一起进入异端的地牢:)
-
@EricPostpischil,我同意在退出时清理可能会浪费资源。特别是如果事情被分页到磁盘。但是清理也有一个重要的功能,它可以让你证明你已经跟踪了所有使用的内存。所以在开发过程中,我建议总是在退出时清理。有总是创建清理代码的习惯,意味着它在你需要的时候就在那里。稍后当您需要跟踪内存泄漏错误时添加它几乎是不可能的。
-
@HAL:关于“它可以让你证明你已经跟踪了所有使用的内存”:它没有这样的事情。如果省略任何
free,则不会出错。
标签: c linux linux-kernel signals