在C中释放内存的需求是什么?

Rik*_*aaf 6 c memory operating-system

我可能会被误导,但据我所知,操作系统会在程序退出或崩溃后清理内存.

如果是这样,在程序结束时释放内存有多大用处?我知道如果一个程序正在运行并且忽略了解除分配,那么内存可能会变得"满",但如果一个程序已经结束并且操作系统解除了程序使用的所有内存,那么手动解除分配该内存的意义何在?

hac*_*cks 4

引用C 中的内存释放问题

\n\n
\n

操作系统负责维护应用程序的资源,包括其内存。当应用程序终止时,操作系统\xe2\x80\x99有责任为其他应用程序重新分配该内存。已终止的应用程序\xe2\x80\x99s 内存的状态(损坏或未损坏)都不是问题。事实上,应用程序终止的原因之一是其内存损坏。如果程序异常终止,则可能无法进行清理。

\n\n

话虽如此,当程序正常终止时可能还有其他原因需要释放内存:

\n\n
    \n
  • 尽责的程序员可能希望释放内存作为质量问题。即使应用程序正在终止,在不再需要内存后释放内存始终是一个好习惯。
  • \n
  • 如果您使用工具来检测内存泄漏或类似问题,则释放内存将清理此类工具的输出。
  • \n
  • 在一些不太复杂的操作系统中,操作系统可能不会自动回收内存,并且在终止之前回收内存可能是程序\xe2\x80\x99的责任。
  • \n
  • 此外,应用程序的更高版本可以在程序末尾添加代码。如果之前的内存没有被释放,可能会出现问题。
  • \n
\n
\n

  • 尽管您的答案非常明确,但您忽略了释放内存对程序终止的负面影响。来自同一网页的引用:_在硬币的另一面,确保在程序终止之前所有内存都是空闲的: - 可能比它的价值更麻烦;- 对于复杂结构的重新分配可能既耗时又复杂;- 可以增加应用程序的大小;- 导致运行时间更长;- 带来更多编程错误的机会。程序终止之前是否应释放内存是特定于应用程序的。_ (2认同)