共用方式為


線程堆疊大小

每個新的線程或光纖都會接收自己的堆疊空間,其中包含保留和最初認可的記憶體。 保留的記憶體大小代表虛擬記憶體中的堆疊配置總計。 因此,保留的大小會限制為虛擬位址範圍。 初始認可的頁面在參考之前不會使用物理記憶體;不過,它們確實會從系統的總認可限制中移除頁面,也就是頁面檔案的大小加上物理記憶體的大小。 系統會視需要認可保留堆疊記憶體中的其他頁面,直到堆疊達到保留大小減去一頁為止(這用來作為防護頁面來防止堆疊溢位),或系統記憶體太低,以至於作業失敗。

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

堆疊在線程結束時釋出。 如果線程由另一個線程終止,則不會釋放它。

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

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

若要變更保留的堆疊大小,請設定 CreateThreadCreateRemoteThread STACK_SIZE_PARAM_IS_A_RESERVATION 的 dwCreationFlags 參數,並使用 dwStackSize 參數。 在此情況下,初始認可的大小是可執行文件標頭中指定的預設大小。 針對 fibers,請使用 CreateFiberExdwStackReserveSize 參數。 認可的大小是在 dwStackCommitSize 參數中指定。

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