我一直认为一个程序不能吃光所有的 RAM,因为操作系统限制了任何程序可以使用的内存总量。然而,我只是想尝试一些关于内存泄漏的事情,并编写了这个简单的 C++ 代码来分配尽可能多的堆:
int main() {
while (true)
new int;
}
我在我的 IDE 中运行它,同时检查我的 (Win 10) RAM 监视器,看到它是如何从运行程序之前的 8GB 可用空间(我的计算机有 16GB 可用空间)变为几乎 0GB 可用空间,突然间整个事情变得没有反应(甚至鼠标都被卡住了)。我等了几分钟,但什么也没发生,所以我不得不强制重启。
我的问题是:我假设操作系统会限制我的程序可以使用的内存是错误的吗?还有:这是内存泄漏的有效示例吗? (我知道其他例子,当你在函数返回之前没有释放内存,但我想知道我写的这个程序是否也是内存泄漏的情况)。
最佳答案
从技术上讲,这不是内存泄漏,因为内存泄漏是指您的程序无法释放不再需要的内存。内存泄漏甚至可能不明显。 Windows 不限制应用程序使用virtual memory (应用程序能够使用比物理安装更多的 RAM 内存,并将它们彼此隔离)。 Windows 挂起,因为它试图为系统中当前运行的所有应用程序(包括您的仍然要求新内存的应用程序)提供服务,同时通过将 RAM 备份到硬盘驱动器来管理内存不足。如果您需要如此多的内存,最好通过调用 CreateMemoryResourceNotification 向 Windows 请求有关内存状态的通知。 .我不同意@drescherjm 在这种情况下,SSD 不会被挂起。我的挂了!))
关于c++ - 我是否会导致太多内存泄漏以致于我的计算机变得无响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59039600/