Bar*_*uch 27 operating-system memory-leaks
当我们说一个程序泄漏内存,说新没有删除在C++中,它真的泄漏?我的意思是,当程序结束时,是否仍然将内存分配给某些非运行程序并且无法使用,或者操作系统是否知道每个程序请求的内存,并在程序结束时释放它?如果我多次运行该程序,我会耗尽内存吗?
Tee*_*kin 19
在具有受保护内存的操作系统(Mac OS 10+,所有Unix克隆,如Linux和基于NT的Windows系统,意味着Windows 2000及更低版本)上,内存在程序结束时释放.
如果你经常运行任何程序而不在它们之间关闭它(同时运行越来越多的实例),你最终会耗尽内存,无论是否存在内存泄漏,所以对于程序来说也是如此内存泄漏.显然,泄漏内存的程序将比没有内存泄漏的相同程序更快地填充内存,但是在不填充内存的情况下运行它的次数更多地取决于程序正常运行所需的内存量,而不是内存泄漏或不.除非你要比较两个完全相同的程序,一个是内存泄漏,另一个是没有内存,所以这种比较真的没什么价值.
当程序运行很长时间时,内存泄漏变得最严重.典型的例子是服务器软件,例如Web服务器.例如,对于游戏或电子表格程序或文字处理程序,内存泄漏并不是那么严重,因为最终会关闭这些程序,从而释放内存.但当然,记忆泄漏是令人讨厌的小动物,应该始终作为原则解决.
但如前所述,所有现代操作系统在程序关闭时释放内存,因此即使内存泄漏,如果您不断打开和关闭程序,也不会填满内存.
Too*_*the 14
执行停止后,OS会返回泄漏的内存.
这就是为什么它并不总是桌面应用程序的大问题,但它是服务器和服务的一个大问题(它们往往运行很长时间.).
让我们看看以下场景:
没有错.
但是如果内存是在循环中分配的并且忘记了删除,那么你会遇到真正的问题:
如果操作系统内存不足,程序可能会崩溃.