【发布时间】:2016-02-04 05:57:44
【问题描述】:
我正在尝试掌握 C++ 内存管理的窍门,并尝试使用无限循环的新语句故意使我的程序崩溃。据我了解,这只会在内存堆上保留越来越多的空间。但是我的程序不会崩溃。在 Windows 任务管理器中对其进行监控,它会使用大约 6GB 的内存,但随后会下降到 5GB,再次上升到 6GB,等等。
与此同时,我的硬盘驱动器正在快速装满。我在分配了大约 30GB 后停止了测试,因为我不想对我的 SSD 造成太大的压力。
现在,我有 8GB 的 RAM,根据 Windows 设置,“虚拟内存大小”(我猜是交换,对吗?)约为 1.5GB。 然而,我能够分配的远不止这些。是什么决定了程序最终是否会崩溃?它使用了什么内存?
谢谢!
#include <iostream>
using namespace std;
int main() {
long alloced = 0;
while (true) {
double *d = new double[12500000];
alloced += 1;
cout << alloced << " times 100MB" << endl;
}
return 0;
}
【问题讨论】:
-
它不会崩溃,分配只会失败,指针 d 会得到一个
nullptr。 -
在分配 64+ GB(可能是 Windows 许可证的限制)后,我的系统发生了奇怪的事情。你只是不够坚持。 :-)
-
@SHR 在考虑到 David 的提示后,我还为
std::bad_alloc添加了一个 try/catch 块,以捕获程序何时会耗尽内存。有关更多信息,请参阅我在他的回复下方的评论。