san*_*g3r 5 operating-system memory-leaks
我知道每个进程都有操作系统分配的自己的地址空间。所以当程序终止时,整个地址空间都被标记为无效(或者可以再次自由重用)。现在,如果上述进程正在泄漏内存,那么在程序终止后会产生什么影响吗?
也就是说,如果我的程序在一段时间后终止或以连续的开始-完成机制在很短的时间间隔内运行,泄漏内存会有多大区别?(我假设泄漏不足以导致普通系统出现颠簸)
我知道泄漏很糟糕 - 但我的问题源于假设在代码的最终例程中使用了一个对象 - 修复泄漏不会有任何区别,因为无论如何进程将在此之后终止?
提前致谢 :)
这是一个非常依赖操作系统的问题。
在使用虚拟内存的现代多处理操作系统(例如:Windows 7、Linux)上,确实所有(好吧,不是全部,但我们不要在这里挑剔)资源都是特定于进程的,并且将被释放回当进程终止时系统。
那么你的程序是否“泄漏内存”有什么关系吗?嗯,这取决于它是如何做到的。
如果您在启动时分配了一堆资源,那么您在关闭时手动释放它们还是让操作系统来释放它们并不重要。我承认我是一个懒惰的程序员,喜欢让操作系统处理这些事情。
但是,如果您出于某种原因在循环中或在运行时按需分配资源,并且不费心以某种方式管理它们,那么理论上,如果您让程序运行足够长的时间,它将不断“泄漏”资源,直到达到这一点没有更多的剩余可分配了。这是一件坏事。不要这样做。
现在有很多平台不这样做。如果您最终从事嵌入式工作,那么您很可能最终会进入一个必须管理自己的所有资源(手动释放内存、关闭文件句柄等)的平台。
| 归档时间: |
|
| 查看次数: |
2364 次 |
| 最近记录: |