![为什么 Windows 关闭时程序有时会报告内存不足错误?](https://linux22.com/image/1424411/%E4%B8%BA%E4%BB%80%E4%B9%88%20Windows%20%E5%85%B3%E9%97%AD%E6%97%B6%E7%A8%8B%E5%BA%8F%E6%9C%89%E6%97%B6%E4%BC%9A%E6%8A%A5%E5%91%8A%E5%86%85%E5%AD%98%E4%B8%8D%E8%B6%B3%E9%94%99%E8%AF%AF%EF%BC%9F.png)
这不是一个问题,只是我好奇的事情 - 而且我只在 Windows 7 上测试过它。
当我关闭计算机(或其他程序发送关闭请求)并且直到工作站实际关闭时,各种程序经常会报告内存不足错误。例如,当我在这段(短暂)时间内打开新选项卡时,我的浏览器(Opera)会显示此类错误。在 .NET 上运行的程序OutOfMemoryException
在这段时间内被要求执行一些“繁重”任务时也会抛出错误。
我觉得这有点意思。为什么这错误?这实际上是另一个错误,只是被误报了?操作系统在关闭时是否会停止响应进一步的内存请求?它甚至可能收缩分配给该进程的逻辑地址范围,然后再全部收回?
答案1
当系统处于关机模式时,它可以拒绝向程序授予额外的内存分配请求。通常,程序会将此记录/报告为内存不足,但真正的原因是操作系统正在关闭并清理已分配的资源,而不是提供更多资源。
正如您所观察到的,这不是一个“真正的”问题,只是一个时间问题……Opera 试图在系统关闭的同时获取一些额外的内存。据推测,这种情况发生是因为 Opera 在发出资源请求之前尚未收到或处理系统关闭消息。