因此,假設我在 Windows 作業系統上創建了一個執行緒,我知道默認堆疊大小遠遠超過所需的大小。然后我可以運行應用程式并詢問執行緒它實際使用的堆疊數量,以便我知道我應該設定多少堆疊大小而不是默認堆疊大小?
uj5u.com熱心網友回復:
Windows 通常不會提交整個堆疊,它只會保留它。(好吧,除非你要求它,例如通過指定一個非零堆疊大小引數CreateThread而不傳遞STACK_SIZE_PARAM_IS_A_RESERVATION標志)。
您可以使用它來計算執行緒在運行時需要多少堆疊,包括任何 CRT、WinAPI 或第三方庫呼叫。
為此,只需從 TEB 中讀取StackBase和值 - 請參閱此問題的答案以了解如何執行此操作。這兩個值的差應該是已提交的堆疊記憶體量,即執行緒實際使用的堆疊記憶體量。StackLimit
或者,如果手動程序就足夠了:只需在 WinDBG 中啟動應用程式,在執行緒退出之前設定斷點,然后使用!teb命令轉儲 TEB。您還可以使用 usage 轉儲整個記憶體映射!address并查找已提交的區域Stack。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/467454.html
上一篇:BlockingCollection在幾次迭代后停止
下一篇:自定義執行緒池有什么缺點?
