執行緒堆疊大小

每個新的執行緒或光纖都會接收自己的堆疊空間,由保留和初始認可的記憶體所組成。 保留的記憶體大小代表虛擬記憶體中的堆疊配置總計。 因此,保留的大小僅限於虛擬位址範圍。 一開始認可的頁面在參考之前不會利用實體記憶體;不過,它們確實會從系統的總認可限制中移除頁面,也就是頁面檔案的大小加上實體記憶體的大小。 系統會視需要認可保留堆疊記憶體中的其他分頁,直到堆疊到達保留大小減去一頁 (,用來防止堆疊溢位) 或系統記憶體不足,作業會失敗。

最好盡可能選擇較小的堆疊大小,並認可執行緒或光纖可靠地執行的堆疊。 保留給堆疊的每個頁面都無法用於任何其他用途。

堆疊線上程結束時釋放。 如果執行緒由另一個執行緒終止,則不會釋放它。

保留和初始認可的堆疊記憶體的預設大小會在可執行檔標頭中指定。 如果記憶體不足,無法保留或認可要求的位元組數目,執行緒或光纖建立就會失敗。 連結器所使用的預設堆疊保留大小為 1 MB。 若要為所有線程和光纖指定不同的預設堆疊保留大小,請使用模組定義中的 STACKSIZE 語句 (.def) 檔案。 作業系統會將指定的大小四捨五入到最接近系統組態細微性的倍數, (通常為 64 KB) 。 若要擷取目前系統的配置細微性,請使用 GetSystemInfo 函式。

若要變更最初認可的堆疊空間,請使用CreateThreadCreateRemoteThreadCreateFiber函式的dwStackSize參數。 此值會四捨五入至最接近的頁面。 一般而言,保留大小是可執行檔標頭中指定的預設保留大小。 不過,如果 dwStackSize 所指定的初始認可大小大於或等於預設保留大小,保留大小就會是這個新的認可大小進位到最接近 1 MB 的倍數。

若要變更保留的堆疊大小,請將CreateThreadCreateRemoteThreaddwCreationFlags參數設定為 STACK_SIZE_PARAM_IS_A_RESER加值稅ION並使用dwStackSize參數。 在此情況下,初始認可的大小是可執行檔標頭中指定的預設大小。 針對 Fibers,請使用CreateFiberExdwStackReserveSize參數。 認可的大小是在 dwStackCommitSize 參數中指定。

SetThreadStackGuarantee函式會設定與呼叫執行緒或光纖相關聯的堆疊大小下限,這些堆疊會在任何堆疊溢位例外狀況期間使用。