linux核心管理記憶體用二進位制夥伴演算法(buddy演算法)
夥伴關係:乙個母實體分成兩個屬性相同的子實體,這兩個實體就是夥伴關係。
乙個記憶體塊分成兩個大小相同的子記憶體塊,這兩個就是夥伴關係。
滿足如下條件:
每個記憶體塊有2^order個頁面,order相同的放在乙個鍊錶中。
分配演算法
假如系統需要4(22)個頁面大小的記憶體塊,該演算法就到free_area[2]中查詢,如果鍊錶中有空閒塊,就直接從中摘下並分配出去。如果沒有,演算法將順著陣列向上查詢free_area[3],如果free_area[3]中有空閒塊,則將其從鍊錶中摘下,分成等大小的兩部分,前四個頁面作為乙個塊插入free_area[2],後4個頁面分配出去,free_area[3]中也沒有,就再向上查詢,如果free_area[4]中有,就將這16(2222)個頁面等分成兩份,前一半掛如free_area[3]的鍊錶頭部,後一半的8個頁等分成兩等分,前一半掛free_area[2]的鍊錶中,後一半分配出去。假如free_area[4]也沒有,則重複上面的過程,知道到達free_area陣列的最後,如果還沒有則放棄分配。
記憶體釋放
記憶體的釋放是分配的逆過程,也可以看作是夥伴的合併過程。當釋放乙個塊時,先在其對應的鍊錶中考查是否有夥伴存在,如果沒有夥伴塊,就直接把要釋放的塊掛入煉表頭;如果有,則從鍊錶中摘下夥伴,合併成乙個大塊,然後繼續考察合併後的塊在更大一級鍊錶中是否有夥伴存在,直到不能合併或者已經合併到了最大的塊(222222222個頁面)。
記憶體分配和釋放
自從學習了c語言,老師就教導我們說 對於動態記憶體的申請和釋放,一定要遵守 誰申請,誰釋放 的原則。在此原則的指導下,不僅是我 不僅是你,就連特級大師都設計了這樣怪怪的函式 函式說明 getwindowtext hwnd,lptstr,int 取得視窗標題。需要在引數中給出儲存標題所使用的記憶體指標...
記憶體分配和釋放
三 記憶體分配和釋放 自從學習了c語言,老師就教導我們說 對於動態記憶體的申請和釋放,一定要遵守 誰申請,誰釋放 的原則。在此原則的指導下,不僅是我 不僅是你,就連特級大師都設計了這樣怪怪的函式 函式說明 getwindowtext hwnd,lptstr,int 取得視窗標題。需要在引數中給出儲存...
記憶體管理演算法 Buddy夥伴演算法
buddy演算法的優缺點 1 儘管夥伴記憶體演算法在記憶體碎片問題上已經做的相當出色,但是該演算法中,乙個很小的塊往往會阻礙乙個大塊的合併,乙個系統中,對記憶體塊的分配,大小是隨機的,一片記憶體中僅乙個小的記憶體塊沒有釋放,旁邊兩個大的就不能合併。2 演算法中有一定的浪費現象,夥伴演算法是按2的冪次...