alloc.c初步之數據結構

分析的代碼是apache1.3.26版

主要涉及到3個結構
block_hdr    典型的單鏈表,每個內存塊都帶有這個頭.
成員
 union align a; ///用於對齊的
 char *endp;   ///指向buf的尾部
 union block_hdr *next; ///下一塊buf
 char *first_avail; ///指向buf首地址  ,first_avail-endp是整塊buf的大小
處理函數:
具體就不寫了,主要都是分配內存,釋放內存的操作,還有一些是用於調試的時候使用的,比如debug_verify_filled,將buf用0xa5填充.
block的釋放是假釋放,並沒有調用delete,這段內存可以再利用:) block_freelist維護了一個鏈表用來管理釋放過的內存.
pool 雙端鏈表
    union block_hdr *first;
    union block_hdr *last;
    struct cleanup *cleanups;  
    struct process_chain *subprocesses; ///指向進程鏈表,這個很重要啊
    struct pool *sub_pools;  ///指向子pool
    struct pool *sub_next;
    struct pool *sub_prev;
    struct pool *parent;  ///指向父pool
    char *free_first_avail;  ///跳過pool header
這裏都是鏈表的操作,一筆代過,有興趣的可以看看,
table
array_header a;
我理解是整個的一張進程內存表,沒有詳細分析,等看到具體的使用,再來完善這部分,呵呵 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章