Windows 7清理C++内存泄漏?

Lan*_*ens 9 c++ linux windows macos memory-leaks

为了好玩,我创建了一个创建了大约5 GB内存并且没有删除它的项目.只要应用程序正在运行,就会出现"内存泄漏".第二个我关闭我的应用程序2秒内的内存恢复正常,好像我的程序从未运行.所以必须提出问题.

Windows 7在完成后会清除坏程序的内存泄漏吗?

所有Windows版本都这样做吗?

Linux和Mac OS X环境会这样做吗?

Phi*_*ard 16

程序终止时,操作系统将回收先前分配给它的所有内存.清理内存泄漏可能是这种情况的副产品,但操作系统实际上并没有这样看待它.它不知道该程序是否泄漏了内存,只是它已经分配了它.

  • +1这就是实际发生的事情.操作系统不知道泄漏内存的过程,它没有.它只是收回它给出的内容. (5认同)

Alo*_*ave 9

一旦应用程序运行的进程退出,操作系统将回收分配给该进程的所有内存.

对于所有操作系统而言,这通常都适用于Windows 7或Windows.

请注意,您可能会观察到其他泄漏资源(如文件句柄等)的不同行为,通常OS不会回收这些资源.因此,通常(是的,有例外)是一种很好的做法,可以使您自己的应用程序清除它所产生的混乱(释放已分配的资源),而不是将其委托给操作系统.

  • 在程序退出时可能(应该)泄漏的唯一资源是一些有些深奥的东西,例如共享内存段(通常,它们旨在超出创建它们的程序).该类别中的项目不多.文件描述符之类的东西应该在所讨论的所有系统上发布. (3认同)
  • @Rohit:没有明确说明.它来自"一个进程有一个虚拟地址空间".分配在此虚拟地址空间中完成,而不是在物理RAM中完成.这个虚拟地址空间属于进程,因此与它一起死掉,反过来这意味着所有的分配也都消失了. (2认同)