到現在爲止使用Linux其中堆棧地址非常高,堆地址是相當低的(通過使用一個C程序打印堆和棧地址可以看到),我有一個Win32進程內存出現問題佈局。 MWSDN是說堆棧地址高於堆地址,但從我在實踐中看到的堆棧地址低於堆地址。所以我很困惑。有人請解釋。的Windows棧和堆地址範圍
回答
嗯,stack addresses are higher than heap addresses
- 這是不正確的。在Windows上,堆棧和堆都可以駐留在進程的地址空間中的任意位置。
如果你開始大量的線程,使巨大的堆分配和加載的DLL數以百計的,你會發現,所有這些對象都均勻地繞在地址空間中傳播。
此圖爲虛擬分配的在Windows上的典型的32位處理的結構。綠色顯示自由區域,藍色表示分配了某些東西。活動主要發生在地址空間的開始處,但在其他地址範圍中也存在。
你可以看到,在所有的線程的所有堆棧地址 在地址空間的低位部分,而堆分配都在較高的位置。我想知道這是否適用於Windows。如果不是,它在哪裏說,並提供更多細節? – 2012-08-12 20:04:18
不完全清楚...? – 2012-08-12 20:05:48
看http://msdn.microsoft.com/en-us/library/ms836325.aspx你可以告訴堆更高,但事實並非如此。 – 2012-08-12 20:09:16
- 1. C++堆棧和範圍
- 2. 堆棧上的本地範圍記錄
- 3. 範圍定義括號和堆棧?
- 4. 的地址範圍
- 5. IPv6地址範圍
- 6. EC2的IP地址範圍
- 7. 在x64 Windows程序中選擇堆棧的虛擬地址
- 8. 超出堆棧空間和對象範圍錯誤的值
- 9. 各種IP地址範圍
- 10. 散列IP地址範圍
- 11. 地址範圍:不夠長
- 12. mips地址超出範圍
- 13. GDB:地址範圍映射
- 14. 如何用Perl解析IP地址和地址範圍?
- 15. AddressSanitizer:堆棧溢出地址錯誤?
- 16. 按堆棧地址查找模塊
- 17. 彙編堆棧索引地址
- 18. 堆棧溢出 - 奇數返回地址
- 19. 範圍,數組和堆
- 20. 驗證子網地址範圍在vnet地址範圍下通過c#
- 21. 內存地址計算「砸堆棧的樂趣和利潤」
- 22. GCC使用相同的地址/指針`array`和`&堆棧
- 23. 如何在MIPS中推送和彈出堆棧中的地址
- 24. JVM - 堆棧和堆棧
- 25. 堆棧參數從堆棧中的錯誤內存地址讀取
- 26. 印度的ip地址範圍
- 27. 範圍內的不相交地址
- 28. C#:枚舉範圍內的IP地址
- 29. 迭代雖然IP的地址範圍
- 30. 比較ip地址與MySQL中的開始和結束ip地址的範圍
在MSDN哪裏不說嗎? – quantum 2013-02-09 04:26:07