我有一个大的动态分配的数组(C ++、MSVC110),我像这样初始化它:
try {
size_t arrayLength = 1 << 28;
data = new int[arrayLength];
for (size_t i = 0; i < arrayLength; ++i) {
data[i] = rand();
}
}
catch (std::bad_alloc&) { /* Report error. */ }
在尝试分配超出系统实际内存的空间(如10 GB)之前,一切都很好。我本来期望能捕获到一个
bad_alloc
异常,但是系统(Win7)开始疯狂地交换内存等等,你知道我在说什么。然后我在任务管理器中检查了一下情况,发现一个有趣的事情,在调试模式下,分配是瞬间完成的,但在发布模式下,它是逐步进行的。
调试模式:
![Debug mode allocation graph](https://istack.dev59.com/V1ONV.webp)
![Release mode allocation graph](https://istack.dev59.com/n33BI.webp)
实际上,我更希望在没有足够内存时得到异常,而不是进入无休止的交换循环。在C ++中有什么方法可以实现这一点吗?
我知道一个解决方案可能是关闭Windows中的交换,但那只会为我解决问题。