什么操作系统将释放内存泄漏?
我有一个桌面程序。 大多数操作系统在自己的地址空间中运行程序。
当程序退出时,我相信大多数操作系统都会释放程序分配的内存并将其返回内存堆栈以供重用。
我不确定的是,如果程序存在内存泄漏,内存“泄漏”还会返回重用,还是会丢失,直到重新启动机器?
这是我今天早些时候问到的一个问题的后续:小内存泄漏是否重要?以及一些评论提到程序结束时释放程序内存。 如果在程序完成时泄漏被释放,那么它肯定会减轻我的压力,严格地排除我的程序中最微小的泄漏。
具体来说,我是一名Windows程序员,我需要知道Windows 98,2000,XP,Vista和7会发生什么情况(内存丢失或内存释放)。但我也想知道Mac和Unix机器上会发生什么情况。
澄清:我在谈论不增长的泄漏。 这些是程序运行时发生一次的恒定大小的泄漏。
我意识到程序中不断增长的泄漏是严重的,必须修复。
无论哪种方式,问题都不是关于泄漏是否必须修复。 这是操作系统在程序结束时是否让您回收泄漏的内存。
内存泄漏只是指您的程序在分配内存时丢失跟踪的内存。 操作系统仍然认为这个内存在程序的地址空间中,因此当程序结束时它将被重新使用。
所有现代操作系统都使用称为虚拟内存的机制来跟踪程序内存。
这是我在CS3231中详细了解虚拟内存的地方。
基本上,操作系统可以将应用程序内存块放在物理内存的任何位置,同时保持映射到这些块应该指向的位置。
从应用程序的角度来看,它可以完全访问内存(32位操作系统上的4gig,64位上的大量内存),并且可以继续分配直至达到硬件限制,即使物理内存小于此限制(这要求操作系统在磁盘上存储一些内存内容,通常在交换文件中)
这通过CPU上的硬件(通常称为MMU(内存管理单元))的硬件来促进,并且有时还有一个TLB(翻译旁视缓冲区)来加速虚拟内存操作。
另一页解释了关于内存保护的更多内容,详细介绍了虚拟内存的一些内部工作。
Windows会在终止后释放进程内存,但泄漏对应用程序性能和可靠性有一定影响(取决于它的大小)
在某些方面,小漏洞比大漏洞更糟糕,因为它们会导致软件爬行降级,直到不可避免的死亡,可能需要几个小时的用户与他们一起工作。
如果你确实知道内存泄漏,我建议你追捕他们,摆脱他们,没有任何操作系统的一部分或你的编程语言会为你做到这一点。 有一些非常好的工具可以查明泄漏。
作为本领域的专业人员,我发现某人不关心他们是否正在做好自己的工作以致可恶。 你应该努力做好自己的工作,这会转化为你编写更好的程序。 允许或忽略内存泄漏为“不重要”意味着您更可能与您认为“不重要”的其他内容相同,如文档,性能或用户友好性。
放任自流的态度会产生问题。 所以我认为记忆力是你工作能力差的标志。
然而,尽管如此,有一些非常真实的理由不会忽视内存泄漏。 例如,你不知道你的用户将运行你的程序多久。 可能是5分钟或5周。 内存泄漏建立起来,并且使用越来越多的资源,直到其他事情开始失败。
另一个要记住的问题是,用户不仅在运行你的程序。 他们也在运行其他应用程序,应用程序使用的资源越多,其他程序可用的资源就越少。 忽略内存泄漏基本上是自私的,不关心用户是否有问题。
链接地址: http://www.djcxy.com/p/19923.html