計算機中的堆位址從低到高向上增長,但棧位址卻從高到低向下增長,為什麼這樣設計,這樣設計有什麼好處?

時間 2021-05-29 23:44:50

1樓:

我的理解是,入棧從高位址向低位址增長,這是資料的儲存階段;出棧是從地位址向高位址進行的,這是資料的讀取階段。

從資料訪問這個層次來看,堆和棧都是從低位址開始的,沒什麼不同,也比較符合常理。

2樓:浮生

正好看到Cortex-M3的相關文件,在Cortex-M3中,堆和棧就是這麼設計的。

這樣設計的目的是當棧不夠用時,可以使用堆空間。

3樓:殷奎生

棧是呼叫子程式安排函式引數和子程式臨時變數用的,堆是子程式申請的記憶體。棧和堆的大小是動態的,在程式還沒有執行的時候不知道大小。程式執行起來以後也是不確定的。

棧和子程式的呼叫巢狀層次有關,堆和子程式的申請記憶體有關。所以乙個從頂向下,乙個從底向上。如果執行到兩個重疊,表示記憶體不夠。

這樣安排比較合理。你能想出其他好的建議?

4樓:

Unix (like)中(不知道windows是怎麼實現的),每個程序都會分配到4G的虛擬記憶體空間,用於儲存程序中的資料(和俗稱的虛擬記憶體不太相同)。然後這4g中的前3g是使用者資料(最後1g是系統資料),這3g中從兩端向中間分成了各種段位址(如堆,棧,環境變數,BSS,靜態常量等),堆和棧正巧處於這兩端的末尾,這樣設計的原因是為了有足夠的空間來載入庫檔案,和變數的記憶體,或其他緊急需要分配的記憶體,以不致造成記憶體不夠,重新找地方分記憶體,導致記憶體混亂。

這是計算機作業系統裡的記憶體一章的知識

計算機中字型的原理是什麼?

Dictionaryphile 作業系統 計算機組成原理 資訊處理 etc.Windows 10 作業系統,C Windows System32 資料夾下有 charmap.exe 同樣的 U 0030 Digit Zero 選擇不同字型,我們看到的是穿著不同外衣的 0 甚至可能不是 0 計算機系統...

計算機中各種漏洞是怎麼形成的?

壹瓜壹果 大部分是由於沒有對外部輸入進行足夠有效的檢查。例如 SQL注入 假設前端使用者輸入使用者名稱和密碼登入,後台通過下面這條SQL驗證使用者名稱和密碼是否正確。select from users where username name andpassword password 如果使用者在使用...

漢字在計算機中的表示方式有哪些?

北極 寫在前面 漢字在計算機內部用什麼編碼,沒有任何限制,純粹是軟體開發人員自己決定的,如果開發人員自己發明一套編碼,也沒有問題。主流作業系統都支援多種模式的編碼。另外,機器內碼不是乙個準確的概念,內碼泛指一切二進位制編碼,當然,不排除某些教材寫的不準確或者年代比較早,弄錯了這個概念。1.漢字在計算...