2012-12-26 55 views
1

據我所知,堆棧不是PE部分映射的內存(即它沒有映射到PE win32部分)。堆棧內存的說明 - 它在哪裏?

我的問題是:棧內存駐留在哪裏?操作系統放在哪裏?

當進程啓動時,操作系統是否爲堆棧分配一頁內存,並在跳轉到進程的代碼之前將ESP寄存器值更改爲該頁面?我有點困惑..

+1

您可能會使用[VMMap](http://technet.microsoft.com/en-us/sysinternals/dd535533.aspx)找到有用的信息, – sergmat

回答

2

操作系統把它放在哪裏可以找到虛擬地址空間中的一些可用空間。它不是PE文件的一部分。

每個進程都有一個虛擬地址空間。模塊被加載到該地址空間。堆在該地址空間中創建。堆棧也是如此。

對於非託管進程,操作系統爲新線程保留整個堆棧分配,然後按需提交內存。受管理的.net進程有不同的策略。他們提交併保留每個線程創建時的整個堆棧分配。