2010-03-19 67 views

回答

9

雖然沒有直接查找堆棧大小的API,但必須保留連續的虛擬地址空間直到達到最大堆棧大小 - 只是很多空間尚未提交。您可以利用此優勢並撥打VirtualQuery兩個電話。

對於第一次調用,請將堆棧中任何值的地址傳遞給它以獲取承諾堆棧空間的基址和大小(以字節爲單位)。在堆棧向下增長的x86機器上,再次從基址和VirtualQuery中減去大小:這將爲您提供爲堆棧保留的空間大小(假設您當時並不精確地處於堆棧大小的限制範圍內)。總結這兩個自然給你的總堆棧大小。

+1

更多的信息在這裏:http://stackoverflow.com/questions/1740888/determining-stack-space-with-visual-studio/1747499#1747499 – Philip 2011-09-22 19:49:44

6

您可以從TEB的Top和Bottom中獲取當前提交的大小。您可以從PE header獲取流程初始保留和提交大小。但是,您無法檢索傳遞給CreateThread的實際大小,也沒有任何API可以從當前堆棧中獲取保留的大小和提交的剩餘大小,請參閱Thread Stack Size