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