這個問題是基於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