2012-05-06 101 views
2

最近我一直在調用堆棧。然而,我一直在閱讀的所有示例和文章都是單線程的。我對如何在內存中調用堆棧以及我們如何分析它感興趣。調用堆棧問題

對不起,在一篇文章中包含如此多的問題。但是,當它們全都相關時,爲每個問題創建一個帖子似乎很麻煩。

我的問題在於Windows x86。與 所以問題我遇到的困難是:

  1. 總是有沒有在過程中每個線程一個調用堆棧?也就是說,線程不共享調用堆棧?

  2. 每個調用堆棧的大小是否固定?或者每個線程都可以不同?

  3. 讓我們假裝我們正在做所有事情,並且用程序集編寫我們的程序。神奇的禮物堆疊給我們嗎?還是我們必須自己實施?

  4. 如果我們在程序集中做了程序,我們是否保留了一些內存並將調用堆棧的內存起始地址設置爲ESP以便設置它?

-Michael

回答

3

1)每個線程都有自己的堆棧 - 幾乎可以肯定。

2)最大堆棧大小是一個進程限制,在標題中指定。初始線程堆棧大小是線程創建參數 - 請參閱CreateThread()API。

3)操作系統管理所有內存。新線程的堆棧在線程創建時由內核動態分配,並且堆棧的頂部用堆棧框架填充,除了其他內容外,還允許線程以類似於中斷的方式彈出框架來開始執行,返回。不要在家裏做這個。

4)不!導入並調用CreateThread()API。