為什麼如下linux環境中,程式棧空間不是從0xC0000000開始?

時間 2021-12-30 22:11:35

1樓:

那張圖說的是 32 位核心上的 32 位程序,你的環境是 64 位核心上的 32 位程序。

傳統的 x86-64 架構,核心空間是 0xffff'8000'0000'0000 以上,使用者空間是 0x0000'7fff'ffff'ffff 以下。核心不需要占用 4 GiB 以下的位址空間,所以 32 位程序可以使用幾乎整個 4 GiB 位址空間,棧從 4 GiB 附近向下增長。

關於這個改變,研究一下 Windows 的行為會帶來一些有趣的結論。

預設情況下,x86 程式執行在 x64 Windows 上,也只能使用 0x7fff'ffff 以下的位址空間——因為太多程式把指標轉 int,給乙個超過 2 GiB 的位址很可能會炸。

而支援 3 GiB / 1 GiB 劃分的 x86 程式(/LargeAddressAware:Yes),執行在 x64 Windows 上,同樣可以使用幾乎整個 4 GiB 位址空間——因為它們本來就能正確處理超過 2 GiB 的位址,給乙個 3 GiB 以上的位址大概率沒問題。

Linux 上所有 x86-32 程式都是支援 3 GiB / 1 GiB 劃分的,因此到了 64 位,直接給整個 4 GiB 位址空間,也就不會出什麼問題了。

解決方案:setarch --3gb program,或者乾脆虛擬機器裡面裝個 32 位 Debian。

為什麼法律中程式公平更加重要?

詹誠 西窗法雨 中提出了這麼乙個問題 人類為什麼要制定法律?文中這樣回答的 最大多數人的最大需要。法律離我們並不遙遠,是和我們的生活息息相關的,我們的每個主張和申訴都渴望能獲得正視,經過公開公正的程式,能得到乙個公平的結果。法律的目的在於公正,而不在於法律本身,因此,當法律不能實現公正時,公正本身便...

為什麼很多程式設計師喜歡linux系統?

江小白 完全免費不需要花費金錢進行購買,有多使用者多工.有良好的介面.豐富的網路功能.具有可靠的安全.穩定的效能.支援多種平台多元化 博森瑞 與其說是喜歡Linux系統倒不如說只是順應時代的潮流罷了.現在伺服器上面執行的系統絕大多數都是Linux及unix like這種系統,程式設計師為了讓自己的程...

為什麼那麼多程式設計師推薦 Linux,是不是在 Linux 下開發效率高?

find goo linux下的成功可以複製。linux操作可以做成指令碼,一鍵執行。linux下的伺服器軟體也是同樣的風格,可以通過指令碼複製,一鍵執行。在管理大量伺服器時,這很有用。像linux指令碼,你可以寫個模板管理指令碼中相同部分,不同部分從資料庫記錄中獲取,只要資料記錄準備好了,可以一鍵...