分析的代码是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;
我理解是整个的一张进程内存表,没有详细分析,等看到具体的使用,再来完善这部分,呵呵