[APR源码解析]APR源码精华sina - 千亿集团

[APR源码解析]APR源码精华sina

2019-02-11 07:10:23 | 作者: 思真 | 标签: 节点,链表,指针 | 浏览: 2036

APR源码都是一些高人不断继续的开发,许多算法做得十分奇妙,现在把这些精华渐渐记载,以便将来能用上。

1. 块内存索引

APR 内存采纳的则是“规矩块”分配原则。支撑的分配的最小空间是 8K,假如分配的空间达不到 8K 的巨细,则依照 8K 去分配;假如需求的空间超越 8K,则将分配的空间往上调整为 4K 的倍数。这样内存就可以用索引来决议内存块的巨细,索引和实践巨细的转化关系为:index = (size BOUNDARY_INDEX) - 1;

2. 用二维指针记载上一个节点的next指针

APR在制造链表结构时,并不是用一个指针别离指向下一个节点和上一个节点。而是选用二维指针变量记载上一个节点的next指针。由于链表刺进或删去操作时仅仅改动next指针罢了。

例如:

struct apr_memnode_t的apr_memnode_t **ref;

apr_pool_cleanup_kill函数中的 lastp = c- next;

3. 一切和链表刺进或获取时有关的,都是选用替换链表头节点

APR对链表中的节点操作时,总是运用到头节点,这样操作时功率是最高的。所以许多链表操作时,最好能转化为这种形式。

例如:

allocator_free函数的freelist链表

node- next = freelist;freelist = node; 这样node就成为 freelist的头节点了。

apr_pool_cleanup_register函数中p- free_cleanups链表

 

c = p- free_cleanups;p- free_cleanups = c- next; 这样就从free_cleanups获取头节点

c- next = p- cleanups;p- cleanups = c; 这样c就成为p- cleanups的头节点了

apr_pool_cleanup_kill函数的p- free_cleanups

c- next = p- free_cleanups;p- free_cleanups = c;

 

这些比如许多.....

 

 

 

 

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表千亿集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章