2010-10-12 65 views

回答

2

它們混合。但是,這取決於實際的編程語言/編譯器。我可以將一個編譯器分配給堆上局部變量的空間並保留指向堆棧上的存儲的指針。

沒有每個線程一個堆棧中的每個過程。因此,例如,一個有20個線程的進程有20個獨立的堆棧。

0

這取決於編譯器,但x86架構是面向一個堆疊,由於方法push和pop指令與單一堆棧指針的工作。編譯器將不得不做更多的工作來維護多個堆棧。

2

正如其他人已經指出的,它主要是一個單一的,混合堆棧。我只是添加一個小細節:合理地,最近的處理器也有一個小的緩存返回地址存儲在處理器本身,這隻存儲返回地址,而不是其他數據。這主要是雖然更快的執行速度的外部不可見...

0

更多注:在Win32中的每個線程都有自己的堆棧。所以,當你告訴「Windows程序」 - 它取決於它有多少個線程。 (當然,線程在運行期間被創建/退出)。