如果该计划已经退出,为什么要免费资源?

26 c++ resource-management

像SDL等等许多库在他们的教程中都有方法调用,在退出程序之前就可以释放资源,但据我所知,大多数操作系统在退出时从进程中释放所有内存,为什么我需要费心去免费如果应用程序要退出呢?

Ste*_*ens 25

内存和资源不是一回事.

内存自动释放.

资源可能会或可能不会自动发布.

  • @ M28:进程退出时,通常不会释放共享内存. (4认同)
  • 您能举例说明现代操作系统中没有自动发布的内容吗? (3认同)

Ale*_*ato 21

即使您的操作系统(并非所有人都这样做)在退出时释放内存,也有一些原因:

  • 这是好方法
  • 它增加了对称性,因此代码看起来更好
  • 操作系统不会在退出时自动释放某些资源,例如设备(传感器,扫描仪......)
  • 如果有人接受此代码并将其放在仅在其运行时的一小部分中使用库的程序中,则在不需要时资源将是空闲的.
  • 如果您正在寻找不良内存泄漏,您的调试器将找不到这些不重要的内存泄漏.


Alo*_*ave 8

分配给程序的资源是否将被回收取决于操作系统.请注意,具体而言,某些嵌入式系统不会释放资源.

大多数操作系统都会回收并释放所分配的资源,但依赖操作系统的行为是不好的做法,因此在退出程序之前应该释放所有获得的资源.

  • 为什么依赖操作系统的行为是不好的做法?例如,如果不依赖于操作系统的行为,则无法读取或写入数据. (4认同)
  • 但是,你也不会做任何输出或输入.输出和输入可能不如计算操作系统以恢复内存.(实际上,如果你在托管环境中,操作系统将恢复内存.在一个独立的环境中,你不能指望它.但在一个独立的环境中,你不能指望iostream存在.) (3认同)

Chr*_*n.K 5

总的来说,我同意其他人所说的话:如果你不在小事上养成良好的习惯,你也会失败.然而,你的问题响了(一个旧的)铃声,关于崩溃的软件.

虽然这个概念比原始问题"稍微"扩展一点(它不仅处理操作系统资源,而且处理您自己的(打开文件等),您可能仍然对它感兴趣.

基本的想法是,如果软件不应该在崩溃时破坏用户数据等(想想数据库/ tx日志等),为什么还要设计/编写一个干净的退出路径.如果你需要重新启动,重新运行它,你也可以"让它崩溃".

好吧,我想有人可以争论这一天的美德,但它仍然很有趣.