2009-07-07 187 views
0

我的應用程序中有一個可能的堆棧溢出(當然,只有在發佈模式下...),並且希望爲其添加一些保護/調查代碼。 我找一個Windows API來告訴我一個線程堆棧(i..e,總大小和已用大小)的當前狀態。 有人嗎?如何檢查線程堆棧的當前狀態

THX 諾姆

回答

1

堆棧的總大小將是你自找的,當你創建的線程的堆棧的大小(或鏈接程序,如果是主線程)。

有以獲取堆棧大小在Windows 7上MSDN線程池(QueryThreadpoolStackInformation)一些初步的參考。

作爲近似,可以局部變量的地址與其他局部變量的地址進一步下跌的堆棧比較得到的金額我們的測量。我相信,在Windows中運行的程序如何選擇奠定局部變量出的虛擬內存空間窗口分配一個線程是到那個語言的運行時執行,而不是東西,真正的Windows知道的;而不是當您試圖略低於分配堆棧內存訪問的地址得到一個異常。

另一種替代方法是通過檢查堆棧是否達到限制來使代碼複雜化,即爲EXCEPTION_STACK_OVERFLOW添加一個異常處理程序,操作系統在檢查堆棧達到其極限時會調用該異常處理程序。有一個例子here