連續記憶體分配

2022-10-10 13:48:14 字數 968 閱讀 2559

實體地址空間:載入到暫存器中的位址,記憶體單元真正的位址,其位數由位址匯流排數決定,32位則表示32條位址匯流排,編號從0一直到可用記憶體的最大值。

cpu執行時程式可看到的位址,由內部和程式設計時使用,比如c語言中讀取乙個指標變數本身的值,讀到的就是邏輯位址,它是相對於當前資料段的位址也就是偏移位址。(段基位址+偏移位址構成線性位址,線性位址通過mmu根據分頁機制轉化成實體地址)

1.編譯時獲取。在已知最後位址的情況下編譯時直接寫死位址。如果起始位址改變需要重新編譯。

2.載入時。起始位址未知下,編譯時生成可重定位的**,載入時生成絕對位址。

3.執行時。執行到該指令時知道確切訪問位址。在程式執行時可以移動記憶體中的位址,更靈活。

連續記憶體分配:給程序分配不小於指定大小的,實體地址連續的記憶體區域

動態記憶體分配:程式被載入執行時,分配乙個程序大小可改變的分割槽

需要維護資料結果:所有已分配分割槽 空閒分割槽

分配策略:最先分配(first-fit) 最佳分配(best-fit)最差匹配(worst-fit)

2.最佳匹配:找到乙個比要求大但又大的最少的分割槽。空閒分割槽列表按照大小排序,釋放時和位址臨近的空閒分割槽合併。分配尺寸較小時效果好,避免大塊分割槽被拆分,減少外碎片的大小,但容易產生無用小碎片。

3.最差匹配:空閒分割槽由大到小排,找滿足要求的最大的分配。釋放時與臨近的空閒分割槽合併。中等大小分配時效果最好,避免出現太多小碎片。但釋放分割槽慢,容易破壞大分割槽。

記憶體碎片:空閒記憶體不能被利用

1.內部碎片:分配單元之間不能被使用的記憶體。由於記憶體過小,申請單元都大於該記憶體塊,無法使用。

2.外部碎片:分配單元內部無法使用。由於分配時取整,申請510位元組實際分配了512位元組,2位元組無法被利用

碎片整理:

通過調整程序占用分割槽位置來減少或避免分割槽碎片

連續記憶體分配

連續記憶體分配 給程序分配一塊不小於指定大小的連續的物理記憶體區域 記憶體碎片 空間記憶體不能被利用 外部碎片 分配單元之間的未被使用記憶體 內部碎片 分配單元內部的未被使用記憶體,取決於分配單元大小是否要取整 當程式被載入執行時,分配乙個程序指定大小可變的分割槽 塊 記憶體塊 分割槽的位址是連續的...

物理記憶體連續記憶體分配

記憶體管理的要求 共享 訪問相同記憶體 記憶體管理方式 重定位,relocation,段位址 偏移 分段,segmentation,資料,堆疊分成三塊,每段連續 分頁,paging,記憶體分為最基本的單位,房子的磚塊 虛擬儲存 virtual memory,linux採用按需頁式虛擬儲存 邏輯位址空...

OS 非連續記憶體分配

利用調整程序占用的分割槽位置,來減少或避免分割槽碎片。2.分割槽對換 通過搶占並 處於等待狀態的程序分割槽,增大可用記憶體空間,將等待狀態的程序掛起。在連續記憶體分配的過程中,不可避免的要產生記憶體碎片,從而使得連續記憶體分配難以實現,並且記憶體利用效率較低。從而需要對記憶體碎片進行更好的利用 非連...