我试图获取C++内存管理的挂件,并试图故意使用无限循环的新语句崩溃我的程序。据我所知,这只是在记忆堆上留出越来越多的空间。但是我的程序不会崩溃。在Windows任务管理器中进行监控时,它会消耗大约6GB的内存,然后降至5GB,再次升至6GB等。如何(故意)导致程序崩溃在C++中使用新
与此同时,我的硬盘正在快速充满。在分配大约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'。 – SHR
在我的系统上分配了64+ GB(可能是Windows许可证的限制)后发生了奇怪的事情。你只是不够执着。 :-) –
@SHR在考虑David的提示后,我还为'std :: bad_alloc'添加了一个try/catch块来捕获程序何时会耗尽内存。看到我的评论下面他的回复更多信息。 –