2012-08-12 113 views
0

到現在爲止使用Linux其中堆棧地址非常高,堆地址是相當低的(通過使用一個C程序打印堆和棧地址可以看到),我有一個Win32進程內存出現問題佈局。 MWSDN是說堆棧地址高於堆地址,但從我在實踐中看到的堆棧地址低於堆地址。所以我很困惑。有人請解釋。的Windows棧和堆地址範圍

+0

在MSDN哪裏不說嗎? – quantum 2013-02-09 04:26:07

回答

3

嗯,stack addresses are higher than heap addresses - 這是不正確的。在Windows上,堆棧和堆都可以駐留在進程的地址空間中的任意位置。

如果你開始大量的線程,使巨大的堆分配和加載的DLL數以百計的,你會發現,所有這些對象都均勻地繞在地址空間中傳播。

enter image description here

此圖爲虛擬分配的在Windows上的典型的32位處理的結構。綠色顯示自由區域,藍色表示分配了某些東西。活動主要發生在地址空間的開始處,但在其他地址範圍中也存在。

+0

你可以看到,在所有的線程的所有堆棧地址 在地址空間的低位部分,而堆分配都在較高的位置。我想知道這是否適用於Windows。如果不是,它在哪裏說,並提供更多細節? – 2012-08-12 20:04:18

+0

不完全清楚...? – 2012-08-12 20:05:48

+0

看http://msdn.microsoft.com/en-us/library/ms836325.aspx你可以告訴堆更高,但事實並非如此。 – 2012-08-12 20:09:16