我会导致太多的内存泄漏,导致我的计算机无法响应吗?

问题描述 投票:1回答:1

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

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

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

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

c++ memory-management memory-leaks heap
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.