lke*_*ler 4 operating-system memory-leaks memory-management
我有一个桌面程序.大多数操作系统在自己的地址空间中运行程序.
当程序退出时,我相信大多数操作系统释放程序分配的内存并将其返回到内存堆栈以供重用.
我不确定的是,如果程序有内存泄漏,内存"泄漏"是否也会被返回以供重用,或者在重新启动机器之前丢失?
这是我今天早些时候提出的问题的后续问题:小内存泄漏是否重要?,并且有一些评论提到程序存储器在程序完成时被释放.如果在程序完成后释放泄漏,那么它肯定会减轻我的压力,以便严格地消除我的程序中最微小的泄漏.
具体来说,我是一名Windows程序员,我需要知道Windows 98,2000,XP,Vista和7会发生什么(内存丢失或内存释放).但我也想知道Mac和Unix机器上会发生什么.
澄清:我说的是不增长的泄漏.这些是在程序运行时发生的一次大小的泄漏.
我确实意识到程序中不断增长的泄漏是严重的,必须加以修复.
无论哪种方式,问题不在于是否必须修复泄漏.当程序结束时,操作系统是否会返回泄漏的内存.
内存泄漏只是指您的程序分配内存然后失去跟踪的时间.操作系统仍然认为该存储器位于程序的地址空间中,因此在程序完成时将重用该存储器.
所有现代操作系统都使用称为虚拟内存的机制来跟踪程序内存.
基本上,它是操作系统可以将应用程序内存块放在物理内存中的任何位置的地方,同时保持映射到这些块应指向的位置.
从应用程序的角度来看,它可以完全访问内存(32位操作系统上的4gig,64位上的大量内存),并且可以保持分配直到达到硬件限制,即使物理内存低于此限制(这要求操作系统将一些内存内容存储在磁盘上,通常是在交换文件中)
CPU上的硬件,通常称为MMU(内存管理单元)的模块便于实现,有时还有TLB(Translation Lookaside Buffer)来加速虚拟内存操作.
另一页解释了更多关于内存保护的内容,其中详细介绍了虚拟内存的一些内部工作原理.