c++ - 我是否会导致如此多的内存泄漏,以至于我的计算机变得无响应?
问题描述
我一直认为一个程序不能吃掉所有的 RAM,因为操作系统限制了任何程序可以使用的内存总量。然而,我只是在尝试一些关于内存泄漏的事情,并编写了这个简单的 C++ 代码来分配尽可能多的堆:
int main() {
while (true)
new int;
}
我在我的 IDE 中运行它,同时检查我的(Win 10)RAM 监视器,并查看它是如何从 8GB 空闲(我的计算机有 16GB)在运行程序之前变为几乎 0GB 空闲的,突然整个事情变得没有响应(甚至老鼠被冻住了)。我等了几分钟,什么也没发生,所以我不得不强制重启。
我的问题是:我认为操作系统会限制我的程序可以使用的内存是错误的吗?还有:这是一个有效的内存泄漏示例吗?(我知道其他例子,当你没有在函数返回之前释放内存,但我想知道我写的这个程序是否也是内存泄漏的情况)。
解决方案
从技术上讲,这不是内存泄漏,因为内存泄漏是指您的程序无法释放不再需要的内存。内存泄漏甚至可以忽略不计。Windows 不限制应用程序使用虚拟内存(应用程序使用比物理安装更多的 RAM 内存并将它们彼此隔离的能力)。Windows 挂起,因为它尝试为当前在系统中运行的所有应用程序(包括仍要求新内存的应用程序)提供服务,同时通过将 RAM 备份到硬盘驱动器来管理内存不足。在需要大量内存的情况下,最好通过调用CreateMemoryResourceNotification向 Windows 请求有关内存状态的通知. 我不同意@drescherjm 关于在这种情况下不会挂起 SSD 的观点。我的挂了!))
推荐阅读
- db2 - 如何将数据从 DB2 加载到 Teradata
- apache-kafka - Kafka 中每组推荐的消费者数量是多少?
- php - 如何在 WooCommerce 中为普通用户隐藏字段并为 B2B 用户组显示?
- wordpress - 单击按钮后加载 wordpress 模板部分
- python - Django - 会话管理
- c - 这个 CRC6 片段给出了错误的结果
- php - 在 PST 中显示 unix 时间会显示一个额外的小时
- python - 在 django 数据库中插入外键
- php - 服务中的 Symfony4 findAll 返回空数组
- android - 如何在 Android TV 应用程序中实现轮播视图