MT 程序堆疊大小

2021-10-05 10:16:35 字數 527 閱讀 1629

程序的堆疊大小:

32位windows,乙個程序棧的預設大小是1m,在vs的編譯屬性可以修改程式執行時程序的棧大小。

linux下程序棧的預設大小是10m,可以通過 ulimit -s檢視並修改預設棧大小。

預設乙個執行緒要預留1m左右的棧大小,所以程序中有n個執行緒時,windows下大概有n*m的棧大小。

堆的大小理論上大概等於程序虛擬空間大小-核心虛擬記憶體大小。windows下,程序的高位2g留給核心,低位2g留給使用者,所以程序堆的大小小於2g。linux下,程序的高位1g留給核心,低位3g留給使用者,所以程序堆大小小於3g。

程序的最大執行緒數:

32位windows下,乙個程序空間4g,核心佔2g,留給使用者只有2g,乙個執行緒預設棧是1m,所以乙個程序最大開2048個執行緒。當然記憶體不會完全拿來做執行緒的棧,所以最大執行緒數實際值要小於2048,大概2000個。

32位linux下,乙個程序空間4g,核心佔1g,使用者留3g,乙個執行緒預設8m,所以最多380個左右執行緒。(ps:ulimit -a 檢視電腦的最大程序數,大概7000多個)

調整任務堆疊大小

最大堆疊設定不合理,陣列過大 比如400m 會產生錯誤,設定正確後執行正常 wl,stack 1677721600 1600m 以下 在windows跑會崩潰 include include include include include include using namespace std au...

程序的堆疊空間

每乙個程序都有自己的乙個程序堆疊空間。在linux介面執行乙個執行碼時,shell程序會fork乙個子程序,再呼叫exec系統呼叫在子程序中執行該執行碼。exec系統呼叫執行新程式時會把命令列引數和環境變數表傳遞給main函式,它們在整個程序堆疊空間中的位置如下圖12 7所示。圖12 7 程序堆疊空...

vs2010設定堆疊大小

vs2010設定堆疊大小一塊連續的記憶體的區域。這句話的意思是棧頂的位址和棧的最大容量是系統預先規定好的,在windows下,棧的大小是2m 也有的是1m,總之是乙個編譯時就確定的常數 如果申請的空間超過棧的剩餘空間時,將提示overflow。因此,能從棧獲得的空間較小。是不連續的記憶體區域。這是由...