夥伴演算法初始化

2021-05-28 10:51:42 字數 909 閱讀 8943

要看你怎麼理解初始化了. 實際上,夥伴系統的初始化是乙個過程, 夥伴系統初始化可以看成是由 bootmem allocator完成, 與夥伴系統相關的主要有兩步

以2.6.11**為例:

1  bootmem的早期, 在初始化zone的過程共會呼叫free_area_init_core, 該函式呼叫  zone_init_free_lists.

可以看到,free_area陣列每個元素裡的free_list的確是空的.

void zone_init_free_lists(struct pglist_data *pgdat, struct zone *zone,

unsigned long size)}

複製**

2. 在bootmem的後期, 會把初始化後未用到的頁面全部釋放給buddy.

在mem_init()函式中有如下**, 注意最初的注釋以及__free_all_bootmem和set_highmem_pages_init函式,這兩個函式都將呼叫__free_pages或__free_page函式將空閒頁面加入相關的freelist

/* this will put all low memory onto the freelists */

totalram_pages += __free_all_bootmem();

reservedpages = 0;

for (tmp = 0; tmp < max_low_pfn; tmp++)

/** only count reserved ram pages

*/if (page_is_ram(tmp) && pagereserved(pfn_to_page(tmp)))

reservedpages++;

set_highmem_pages_init(bad_ppro);

複製**

初始化 指定初始化

id alloc 物件的誕生過程,主要是從作業系統獲得一塊足夠大的記憶體,以存放該類的全部例項變數,並將其指定為存放記憶體物件的實力變數的位置。alloc方法同時將這塊記憶體全部設定為0。結果是 bool變數初始化為no,所有的int型別變數為0,float變數為0.0,所有的指標為nil.obje...

初始化 1 預設初始化 列表初始化

初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...

初始化 MyBatis初始化之載入初始化

在mybatis初始化過程中,大致會有以下幾個步驟 1.建立configuration全域性配置物件,會往typealiasregistry別名註冊中心新增mybatis需要用到的相關類,並設定預設的語言驅動類為xmllanguagedriver 3.構建defaultsqlsessionfacto...