當頁表中的頁表項大部分都有效的時候,多級頁表還能節省空間嗎?

時間 2021-11-05 17:41:48

1樓:Icecor

多級頁表能夠節省空間,確實是這樣的。

首先明確為什麼需要多級頁表對映。我們這裡舉例一級頁表直接對映,最小對映單元是16MB,如果是二級頁表對映,最小對映單元是4KB。

為什麼說多級對映節省空間。原因在於上面這兩種對映方式,如果我malloc大小是64KB。如果CPU只支援一級對映,那麼我最小申請的記憶體是16MB,雖然我們用不了這麼多,但是給我們最小也得16MB,申請的記憶體大小一定是16MB的整數倍。

如果是二級對映最小單位是4KB。那麼我們最終實際申請的記憶體就是64KB,申請記憶體大小一定是4KB的整數倍。這樣相比之下,要比一級對映減少了浪費空間。

即使大部分有效也是這個道理,同樣現在CPU多是3級頁表,比我舉例的頁表管理情況更精細一些,但是最終申請記憶體的最小單位,目前還是4KB,這也是取決於MMU的內部頁表管理邏輯。

從Windows任務管理器看程序占用記憶體一定是4KB的整數倍。原因在於MMU管理的記憶體最小單位就是4KB。

2樓:喜鵲

只考慮空間複雜度,當乙個程序使用了位址空間中的每一頁時,頁表項全部都有效,此時,採用二級頁表,比使用一級頁表,要多費空間,即多費乙個頁目錄的空間。

至於存在的意義,多級頁表不要求頁表連續,不要求一次性分配全部空間,這是優勢。

書裡沒有提,我猜是因為這種情況太極端,對於現在64位的位址空間(實際上可能是48位)幾乎不可能用完

Linux中核心頁表是幹嘛用的,為什麼要有核心頁表?

Rivalak 核心頁表同樣也是用作位址翻譯的,不過是作用在核心態下。核心頁表在記憶體申請的時候就會被設定好,這也是為什麼說虛擬位址空間只適用於使用者態的原因。不過核心空間的動態對映區的 vmalloc 區是例外,其工作原理和使用者態 malloc 申請記憶體時的工作原理一致。 詳細內容請參考 深入...

大部分情侶分手的原因都有哪些?

天然向上 本質原因基本上有幾種 1.三觀不合,也就是兩個人想要的活法不一樣2.性格不合,也就是兩個人處事的方法不一樣3.感情不合,也就是當前可能互相沒什麼感情表面原因有以下幾種 1.溝通少,雙方因為沒有共同目標,又沒有共同克服困難的決心2.行事習慣不同,導致互相之間缺乏默契,互相認為被忽視,不替對方...

為什麼大部分遊戲都有不同程度的通貨膨脹?

能維持住老玩家的不是遊戲道具的價值保持恆定,是遊戲更新,新的遊戲內容。一家餐廳的菜做得很好吃,但是一成不變,這樣你吃個半年也就膩了。遊戲內容的增多,必然就導致遊戲週期與成本變長。像隔壁爐石傳說,如果沒有退環境,萌新需要開十多個拓展包才能把基本的卡池湊好,這就需要不少的財力時間。門外的人一看,這個遊戲...