如何(故意)使用 new 在 C++ 中导致程序崩溃
How to (deliberately) cause a program crash in C++ using new
我正在尝试掌握 C++ 内存管理的窍门,并尝试使用新语句的无限循环故意使我的程序崩溃。据我了解,这只会在内存堆上保留越来越多的 space 。但是我的程序不会崩溃。在 Windows 任务管理器中监控它,它将使用大约 ~6GB 的内存,但随后下降到 5GB,再次上升到 6GB,等等。
与此同时,我的硬盘很快就满了。我在分配了大约30GB后就停止了测试,因为我不想对我的SSD造成太大的压力。
现在,我有 8GB 内存,根据 Windows 设置,"virtual memory size"(我猜是交换,对吧?)大约是 ~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;
}
Now, I have 8GB of RAM and according to Windows settings, the "virtual memory size" (I guess it's the swap, right?) is about ~1.5GB.
这是一个常见的混淆。 Windows 恰好通过其虚拟内存系统实现交换,而这恰好是 Windows 虚拟内存系统中唯一可配置的设置。这导致很多人认为交换与虚拟内存相同。
这是不正确的。交换是在虚拟内存出现之前发明的,并且有许多具有虚拟内存的系统根本没有交换(大多数家用 WiFi 路由器)。它们是完全不同的东西。
您所说的 1.5GB 是页面文件的大小。
However I was able to allocate much more than that. What determines whether the program will finally crash? What memory did it use?
它使用虚拟内存,64 位操作系统可以创建数 TB 的虚拟内存。这不是稀缺资源。
要让您的程序崩溃,您需要使用内存,而不仅仅是分配内存。有些操作系统确实允许您对进程施加虚拟内存限制,但我不确定 Windows 是否是其中之一。 (这通常不是一个好主意。)
我正在尝试掌握 C++ 内存管理的窍门,并尝试使用新语句的无限循环故意使我的程序崩溃。据我了解,这只会在内存堆上保留越来越多的 space 。但是我的程序不会崩溃。在 Windows 任务管理器中监控它,它将使用大约 ~6GB 的内存,但随后下降到 5GB,再次上升到 6GB,等等。
与此同时,我的硬盘很快就满了。我在分配了大约30GB后就停止了测试,因为我不想对我的SSD造成太大的压力。
现在,我有 8GB 内存,根据 Windows 设置,"virtual memory size"(我猜是交换,对吧?)大约是 ~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;
}
Now, I have 8GB of RAM and according to Windows settings, the "virtual memory size" (I guess it's the swap, right?) is about ~1.5GB.
这是一个常见的混淆。 Windows 恰好通过其虚拟内存系统实现交换,而这恰好是 Windows 虚拟内存系统中唯一可配置的设置。这导致很多人认为交换与虚拟内存相同。
这是不正确的。交换是在虚拟内存出现之前发明的,并且有许多具有虚拟内存的系统根本没有交换(大多数家用 WiFi 路由器)。它们是完全不同的东西。
您所说的 1.5GB 是页面文件的大小。
However I was able to allocate much more than that. What determines whether the program will finally crash? What memory did it use?
它使用虚拟内存,64 位操作系统可以创建数 TB 的虚拟内存。这不是稀缺资源。
要让您的程序崩溃,您需要使用内存,而不仅仅是分配内存。有些操作系统确实允许您对进程施加虚拟内存限制,但我不确定 Windows 是否是其中之一。 (这通常不是一个好主意。)