这个问题是基于C/C++内存分配的。当您在堆栈中请求更多空间时会发生什么情况?
我读到堆栈和堆之间的差异,有一件事让我感到困惑。应该在堆中为大对象分配内存,但也可以在堆栈中作为局部变量进行分配。
从此线程(C/C++ maximum stack size of program)我了解堆栈是有限的,并且限制相对较低(最大7.4MB)。
我测试该限制与下面的程序:
#include <vector>
int main() {
std::vector<double> test;
for (int i = 0; i < 5000000; i++){
test.push_back(i);
}
return 0;
}
总分配的存储器是8字节*(5.000.000)= 40MByte。 这似乎不会引发任何类型的错误。我阅读了这个资源(https://software.intel.com/en-us/articles/determining-root-cause-of-sigsegv-or-sigbus-errors),发现堆栈溢出可能会引发分段错误或总线错误。
所以我想,问题是:当你在堆栈中“分配”更多的内存时会发生什么情况?
DR; TL;它发生**堆栈溢出** – 101010
'std :: vector'可能会将内存分配给堆,而不是堆栈。 – MikeCAT
您不在测试堆栈分配,您正在测试堆分配。要测试堆栈分配,例如运行无限递归函数 - 您将得到本地错误的名称 – Rostislav