爲什麼堆棧中從低位地址到高位地址分配的結構數據成員內存越來越高?這個過程中的機制是什麼?爲什麼結構的數據成員內存從堆棧中的低位地址向高位地址分配越來越高
0
A
回答
0
一個優勢是操作系統能夠輕鬆檢查進程(程序)中是否發生溢出。當堆棧從較高到較低時,堆段通常從較低到較高。如果兩個段逐漸增長爲重疊,則OS可以檢測到該過程中的溢出。
下面是C程序的內存佈局圖。希望這個幫助。
而且,這樣的選擇依賴於OS設計師。如果你是初學者,只是不關心它。認爲容易。
0
堆棧通常是向下生長的唯一東西,而其他所有東西都向上生長。但是,堆棧中的結構與堆中的相同結構相同:由內存中第一個字節的地址標識的內存區域,填充機制也相同。
所以,有趣的問題不是「爲什麼棧上的結構向上填充」,而是「棧爲什麼會向下延伸?」
答案很簡單:由於堆棧向下增長,堆棧上的對象由其第一個字節的地址標識,因此堆棧指針始終指向堆棧中的第一個元素。
這看起來很平凡,但它在機器級別上稍微簡化了一些事情。例如,在PowerPC上,有一條指令將一個值保存在一個指針的偏移處,並將該指針更新爲計算出的地址。該指令可以自動分配整個堆棧幀並將其鏈接到先前的堆棧幀,而不會以其他方式工作。 (我希望這不是太多技術細節...)
相關問題
- 1. 越來越地理位置從IP地址
- 2. 爲什麼堆棧地址低於Visual C++中的堆棧地址?
- 3. 爲什麼地址差是越來越(根據指針型)
- 4. 高VS低內存地址和分支
- 5. 在ARC中訪問高內存地址(+13位地址)
- 6. 存儲在堆內存中的成員數據的地址
- 7. 地址越界
- 8. 越來越高複製數據存儲
- 9. FB:意見越來越高,越來越「不健康地」削減
- 10. 靜態,堆棧和堆內存分配的地址排序?
- 11. 堆內存越來越大
- 12. 爲什麼堆棧增長到較低的地址?
- 13. 地址0x66越界
- 14. 位的內存地址
- 15. C堆棧指向地址?
- 16. 在堆棧上放置64位地址
- 17. 數組的元素是否保證從低地址到高地址存儲?
- 18. 方向堆疊更高的存儲器地址的,以降低存儲器地址
- 19. 如何強制Linux在高(64位)地址空間中分配內存
- 20. 堆棧和內存地址的範圍是什麼?
- 21. 跨越結構向量的成員
- 22. 堆棧內存地址區域
- 23. vmalloc_to_pfn在Linux 32系統上返回32位地址。爲什麼它切斷PAE物理地址的高位?
- 24. 堆棧參數從堆棧中的錯誤內存地址讀取
- 25. 屏幕越來越小,分辨率越來越高
- 26. c中的最低和最高內存地址?
- 27. 我們如何找到堆的最高地址和最低地址
- 28. 改變的UIImageView的位置 - 爲什麼我越來越
- 29. 較高地址和較低地址之間的混淆
- 30. TableRow高度越來越差
堆棧增長行爲是依賴於環境的。結構排序由標準規定。 – dmckee