gpt4 book ai didi

windows - 操作系统什么时候清除进程的内存

转载 作者:可可西里 更新时间:2023-11-01 11:13:32 24 4
gpt4 key购买 nike

进程在某些操作系统上成功或异常终止,操作系统何时决定删除分配给该进程的内存(数据、代码等);在退出时或当它想为新进程分配内存时?

这个删除内存分配过程在所有操作系统(winXP、Win7、linux、Mac)上都是一样的吗?

我明白了,页表有那个进程的虚拟地址和内存中实际物理地址的映射。

谢谢。

最佳答案

操作系统回收进程资源的方式可能(并且通常确实)因操作系统而异。在 Windows 方面,NT 衍生操作系统的行为相似,因此 win XP 和 win7 之间应该没有什么区别。请注意,在这种情况下询问“内存”是一种过度简化,因为存在不同类型的内存。例如,典型的 Windows 应用程序将具有堆栈内存、堆内存(有时是多个堆)、指令/静态内存,也许还有共享内存。此内存的大部分由进程单独拥有,Windows 将在进程终止(甚至异常终止)时回收它。

但是,共享内存可以(而且经常)有多个所有者;它与 Windows handle 相关联(可能被多个进程引用的内核级对象)。句柄有一个引用计数,如果引用计数变为零,相关资源将被回收。这意味着共享内存可以比引用它的进程长寿。此外,进程可能会“泄漏”句柄,并且永远无法回收句柄。程序员有责任确保这些句柄正确关闭并且不会泄漏;异常终止的可能性使这一责任复杂化。

附带说明一下,当 Windows“回收”内存时,它只是意味着内存可用于将来分配给其他进程等。实际的 1 和 0 通常会保留在那里,直到操作系统分配内存 < em> 和 内存的新所有者主动覆盖它。所以“回收”并不意味着内存立即清零或类似的东西;在这件事上擦洗内存是低效的,而且通常是不必要的。如果您出于安全考虑而提出要求,则不应依赖操作系统;在您的进程将内存释放回操作系统之前,您需要自己清理内存。

如果您想了解有关现代 Windows 操作系统如何处理内存的更多信息,并且不介意进行一些挖掘,MSDN 上的 Windows API 文档有很多关于该主题的信息,但有些分散。好的起点可能是 Windows 句柄,以及加载/卸载库/进程调用。 Application Programming for Windows (Richter)如果我没记错的话,可能有一些关于这方面的不错的信息,但我现在手头没有副本可以查看。

希望对 Linux 内部结构有更多了解的人可以解决问题的这一方面。这是特定于操作系统的内容,因此可能存在差异。可能值得注意的是,NT 之前的 Windows(例如 Windows 95、98 等)具有完全不同的进程内存模型。这些差异往往会使操作系统在异常终止的情况下更难回收内存;一些用户发现在运行不稳定的应用程序时需要频繁重启操作系统,以清理累积的内存泄漏。

关于windows - 操作系统什么时候清除进程的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12715229/

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