gpt4 book ai didi

memory-management - 哪些操作系统将释放内存泄漏?

转载 作者:行者123 更新时间:2023-12-04 07:48:30 25 4
gpt4 key购买 nike

我有一个桌面程序。大多数操作系统在其自己的地址空间中运行程序。
当程序退出时,我相信大多数操作系统都会释放程序分配的内存,并将其返回到内存堆栈以供重用。
我不确定的是,如果程序发生内存泄漏,“泄漏”的内存是否也会被退回以供重用,还是在机器重新启动之前丢失?
这是我今天早些时候提出的问题的后续:Do Small Memory Leaks Matter Anymore? ,并且那里的一些评论提到程序完成时程序内存被释放。如果在程序完成时释放了泄漏,那么严格消除我的程序中最微小的泄漏肯定会给我带来更少的压力。
具体来说,我是一名 Windows 程序员,我需要知道 Windows 98、2000、XP、Vista 和 7 会发生什么(内存丢失或内存释放)。但我也想听听 Mac 和 Unix 机器上会发生什么。

澄清:我说的是非增长泄漏。这些是在程序运行时发生一次的恒定大小的泄漏。
我确实意识到程序中不断增长的泄漏是严重的,必须加以修复。
无论哪种方式,问题都不在于是否必须修复泄漏。这是程序结束时操作系统是否将泄漏的内存归还给您。

最佳答案

内存泄漏只是指您的程序在分配内存时丢失了跟踪。操作系统仍然认为这 block 内存在程序的地址空间中,因此当程序结束时它会被重用。

所有现代操作系统都使用一种称为虚拟内存的机制来跟踪程序内存。

这是我非常详细地了解虚拟内存的地方CS3231 .

基本上它是操作系统可以将应用程序内存块放置在物理内存中的任何位置,同时维护到这些 block 应该指向的位置的映射。

从应用程序的角度来看,它可以完全访问内存(在 32 位操作系统上是 4gig,在 64 位上是巨大的),并且可以继续分配直到达到硬件限制,即使物理内存小于这个限制(这需要操作系统将一些内存内容存储在磁盘上,通常在交换文件中)

这得益于 CPU 上的硬件,一个通常称为 MMU(内存管理单元)的模块,有时还有一个 TLB(Translation Lookaside Buffer)来加速虚拟内存操作。

另一个page这解释了有关内存保护的更多信息,其中详细介绍了虚拟内存的更多内部工作原理。

关于memory-management - 哪些操作系统将释放内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1720014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com