alloc.c初步之数据结构

来源:互联网 发布:恋爱神器软件 编辑:程序博客网 时间:2024/06/05 18:11

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

原创粉丝点击