2012-09-11 54 views

回答

10

由於BSS段預計將在「可執行文件的BSS段未存儲在磁盤上」

零初始化時創建一個新的進程,只是存儲一堆零的可執行文件浪費空間,可執行文件只是指示BSS段應該在哪裏啓動以及它應該有多大。

「並且內核將零頁映射到BSS範圍。」

當內核從可執行文件構建一個新進程時,它會爲BSS範圍創建一個到零頁面的映射,該頁面是一個包含所有零的靜態(虛擬)頁面。該映射將在其上進行寫入時複製設置,因此,當新進程首次寫入其中一個BSS頁面時,靜態零頁的實際副本將在允許完成寫入之前分配到另一個內存頁中。 (a)節省可執行文件中的空間並且(b)避免實際分配可能永遠不會被進程觸及的BSS頁面,從而節省存儲器使用量,同時仍然保證每個進程中的BSS片段似乎根據需要進行零初始化。

+0

很好的回答!我在哪裏可以獲得像你這樣的真棒知識? – Bruce

+1

書籍,源代碼,和25年以上* nix的經驗,主要是... – twalberg

+0

你能推薦一些好書嗎? – Bruce

相關問題