2
我從her讀到 「可執行文件的BSS段未存儲在磁盤上,內核將零頁映射到BSS地址範圍。」 有人可以提供關於這裏發生了什麼的詳細答案嗎?將BSS映射到虛擬內存段0的含義是什麼?
我從her讀到 「可執行文件的BSS段未存儲在磁盤上,內核將零頁映射到BSS地址範圍。」 有人可以提供關於這裏發生了什麼的詳細答案嗎?將BSS映射到虛擬內存段0的含義是什麼?
由於BSS段預計將在「可執行文件的BSS段未存儲在磁盤上」
零初始化時創建一個新的進程,只是存儲一堆零的可執行文件浪費空間,可執行文件只是指示BSS段應該在哪裏啓動以及它應該有多大。
「並且內核將零頁映射到BSS範圍。」
當內核從可執行文件構建一個新進程時,它會爲BSS範圍創建一個到零頁面的映射,該頁面是一個包含所有零的靜態(虛擬)頁面。該映射將在其上進行寫入時複製設置,因此,當新進程首次寫入其中一個BSS頁面時,靜態零頁的實際副本將在允許完成寫入之前分配到另一個內存頁中。 (a)節省可執行文件中的空間並且(b)避免實際分配可能永遠不會被進程觸及的BSS頁面,從而節省存儲器使用量,同時仍然保證每個進程中的BSS片段似乎根據需要進行零初始化。
很好的回答!我在哪裏可以獲得像你這樣的真棒知識? – Bruce
書籍,源代碼,和25年以上* nix的經驗,主要是... – twalberg
你能推薦一些好書嗎? – Bruce