分析的代碼是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;
我理解是整個的一張進程內存表,沒有詳細分析,等看到具體的使用,再來完善這部分,呵呵