c++ - 我是否会导致太多内存泄漏以致于我的计算机变得无响应?

标签 c++ memory-management memory-leaks heap-memory

我一直认为一个程序不能吃光所有的 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/

相关文章:

c++ - 为什么没有人使用 STL 命名约定?

c++ - 将动态数组传递给其他函数的正确方法

java - 测试 Swing 应用程序

C# 如何使我的 sqlDataReader 脱机?

java - PermGen 空间错误 - Glassfish 服务器

c++ - 如何删除指针的 STL 列表?

c++ - 为什么聚合推导中不支持大括号初始化列表但支持大括号省略?

c++ - malloc() 和 glDrawPixels() 的访问冲突?

c - 在 WOW64 上运行的 32 位进程的实际页面大小是多少?

c++ - 可以在分配有新位置的指针上调用 delete 吗?