首页 > 解决方案 > 我是否会导致如此多的内存泄漏,以至于我的计算机变得无响应?

问题描述

我一直认为一个程序不能吃掉所有的 RAM,因为操作系统限制了任何程序可以使用的内存总量。然而,我只是在尝试一些关于内存泄漏的事情,并编写了这个简单的 C++ 代码来分配尽可能多的堆:

int main() {
    while (true)
        new int;
}

我在我的 IDE 中运行它,同时检查我的(Win 10)RAM 监视器,并查看它是如何从 8GB 空闲(我的计算机有 16GB)在运行程序之前变为几乎 0GB 空闲的,突然整个事情变得没有响应(甚至老鼠被冻住了)。我等了几分钟,什么也没发生,所以我不得不强制重启。

我的问题是:我认为操作系统会限制我的程序可以使用的内存是错误的吗?还有:这是一个有效的内存泄漏示例吗?(我知道其他例子,当你没有在函数返回之前释放内存,但我想知道我写的这个程序是否也是内存泄漏的情况)。

标签: c++memory-managementmemory-leaksheap-memory

解决方案


从技术上讲,这不是内存泄漏,因为内存泄漏是指您的程序无法释放不再需要的内存。内存泄漏甚至可以忽略不计。Windows 不限制应用程序使用虚拟内存(应用程序使用比物理安装更多的 RAM 内存并将它们彼此隔离的能力)。Windows 挂起,因为它尝试为当前在系统中运行的所有应用程序(包括仍要求新内存的应用程序)提供服务,同时通过将 RAM 备份到硬盘驱动器来管理内存不足。在需要大量内存的情况下,最好通过调用CreateMemoryResourceNotification向 Windows 请求有关内存状态的通知. 我不同意@drescherjm 关于在这种情况下不会挂起 SSD 的观点。我的挂了!))


推荐阅读