爲什麼當你將一個值壓入堆棧時,ESP寄存器減少(而不是增加),當你彈出一個值時,ESP寄存器增加(而不是減小) ?這一點對我來說很直觀。ASM - 推動/彈出
2
A
回答
6
這就是因爲這種方式堆棧「從上到下」增長,反對堆,這是分配在自下而上。
在地址空間有限的架構上,這是一個設計決策,您可以更加靈活地使用它們 - 只有分配的內存區域的總和不能超過某個限制。
現在堆棧和堆地址空間總是保存在獨立的內存區域,但他們決定保持向後堆棧。
1
這或多或少是任意的設計選擇。如果堆棧指針在推動時遞增並且在彈出時遞減,則堆棧將同樣適用。在某些語言中,文字是從左到右而不是從左到右書寫的,而具體的方向並不能使語言更好或更差。
1
對於一個單一的內存系統,現在仍然存在於程序員面臨的許多環境中,您可能會從低地址向高地址增長堆棧,並且堆棧從內存高地址的頂端向下逐漸降低地址,最大限度地利用該內存而不會發生碰撞。如果他們都長大了,就需要讓他們以一種痛苦和醜陋的方式跳躍,或者儘管擁有可用的記憶,但其中一個或另一個將受到限制。在許多處理器上,您可以自由地重寫malloc或創建自己的堆棧,並使堆棧長大(某些指令集可以任意選擇,某些方式無需額外的努力就可以),堆堆放下來。儘管如此,儘管如此,堆棧還是會堆積起來並堆積起來。
相關問題
- 1. 推動和彈出反應原生
- 2. 推動和彈出的手臂
- 3. 推動和彈出視圖控制器 - 動畫
- 4. 內聯asm:推函數參數
- 5. 推動堆棧參考開始使用ASM生成的類
- 6. UINavigationController彈出/推送UITableViewController僅適用於動畫:NO
- 7. Z3解決方案Z3_parse_smtlib2_file - Z3 C API推動彈出
- 8. iOS 8:UINavigationController彈出沒有動畫,然後推
- 9. jquery移動彈出ui彈出屏幕不滾動時滾動
- 10. 黑莓推送屏幕沒有彈出
- 11. 「彈出」後無法推送viewController
- 12. CUDA堆棧推送和彈出
- 13. 陣列推紅寶石彈出
- 14. 從堆棧彈出而沒有推入
- 15. Fancybox自動彈出
- 16. ASM,與ASM
- 17. 推土機不能與彈簧啓動
- 18. 彈性定位/滾動問題彈出
- 19. Android彈出活動堆棧
- 20. 拖動WPF彈出控件
- 21. InAppSettingsKit自動彈出UINavigationController?
- 22. 道場彈出自動
- 23. jQuery彈出框動畫
- 24. jQuery彈出窗口滾動
- 25. 彈出顯示滾動
- 26. 彈出的滾動條
- 27. iPhone視圖彈出動畫?
- 28. 創建彈出式動畫
- 29. jquery有動畫彈出
- 30. 移動彈出到前臺
有幾次,我不得不使用一個堆棧,它*向上增長,* *對我來說非常直觀。 – harold 2012-02-28 09:20:40