到現在爲止使用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. 堆棧和內存地址的範圍是什麼?
- 2. C++堆棧和範圍
- 3. 堆棧上的本地範圍記錄
- 4. 範圍定義括號和堆棧?
- 5. C堆棧指向地址?
- 6. 爲什麼堆棧地址低於Visual C++中的堆棧地址?
- 7. IPv6地址範圍
- 8. arm cortex -m最小堆棧地址和SRAM地址關係
- 9. 在java中使用範圍以外的本地堆棧變量
- 10. 靜態,堆棧和堆內存分配的地址排序?
- 11. EC2的IP地址範圍
- 12. 在x64 Windows程序中選擇堆棧的虛擬地址
- 13. 引用堆棧對象的地址
- 14. 返回到堆棧上的地址
- 15. 修改堆棧上的返回地址
- 16. 指針大小和地址範圍
- 17. 超出堆棧空間和對象範圍錯誤的值
- 18. 檢查IP地址範圍
- 19. mips地址超出範圍
- 20. 地址範圍:不夠長
- 21. 散列IP地址範圍
- 22. GDB:地址範圍映射
- 23. 地址超出範圍mips
- 24. 數組範圍地址
- 25. 引用IP地址範圍
- 26. MARS - 地址超出範圍
- 27. 各種IP地址範圍
- 28. 如何用Perl解析IP地址和地址範圍?
- 29. 彙編堆棧索引地址
- 30. 在堆棧上放置64位地址
在MSDN哪裏不說嗎? – quantum 2013-02-09 04:26:07