apr研究-内存池-1
来源:互联网 发布:学生p2p网络投资 编辑:程序博客网 时间:2024/05/29 02:59
APR(Apache portable Run-time libraries,Apache可移植运行库)。apr是由纯粹的c语言开发的。
主要作用:提供一个可以跨越多个操作系统的底层平台。现在著名的apache服务器就是在这个基础上开发的。可见,他的稳定性,和速度都是屈指可数的。
这里我要研究的就是他的mempool(内存池)。
http://apr.apache.org/
(从上面的网址,我们可以下载到,最新的版本。)
解压后有三个文件需要研究:apr_allocator.h,apr_pools.h,apr_pools.c
首先研究几个重要的数据结构定义:
1.【基本的内存节点】结构。
struct apr_memnode_t {
apr_memnode *next; /* 下一个内存节点 */
apr_memnode **ref; /* 指向自己的引用 */
apr_uint32_t index; /* 大小 */
apr_uint32_t free_index; /* 自由内存的大小 */
char *first_avail;/* 指向第一块自由内存 */
char *endp; /* 指向最后一块自由内存 */
}
2.【内存池】结构。
struct apr_pool_t {
apr_pool_t *parent;
apr_pool_t *child;
apr_pool_t *sibling;
apr_pool_t **ref;
.../*中间省略了一些,^_^*/
apr_memnode_t *active;
apr_memnode_t *self;
char *self_first_abail;
.../*中间省略了一些,^_^*/
}
注意:通过上面可以看出,apr_memnode_t和apr_pool_t之间的联系(apr_pool_t是二叉树的结构)。
不难看出,apr_pool_t也是被保存到apr_memnode_t中的。是不是这样呢?
我们分析一下:apr_pool_t 中有一个"apr_memnode_t *self;",这个就是指向存储apr_pool_t的apr_memnode_t节点的指针,这里留的这个位置,呵呵,是不是我们所想象呢。
那么我们找一下源代码的语句来看看:
函数:apr_pool_create_ex里面有关于self的操作,我们可打开apr_pools.c文件搜索看看这个函数。apr_pool_create_ex这个函数在apr_pool_initialize函数里面被调用,用来创建global_pool。
待续。。。
- apr研究-内存池-1
- apr内存池
- [转]apr内存池
- apr内存池
- APR-内存池
- APR 内存池
- APR内存池的创建与销毁
- apr-pool 内存池测试用例
- APR内存池的学习与实现
- APR 池
- apr内存池阅读笔记-结构体说明
- APR Pool内存管理策
- APR Pool内存管理策
- 内存池性能研究
- apr
- APR
- 1:STL中的内存研究
- 内存池设计研究与应用
- my.js11
- Mac逆向工程起步
- my.js12
- SQL数据类型和Java数据类型的对应关系
- 个人对kobject的一点研究(6)
- apr研究-内存池-1
- 罗马计数法
- HTML<base>标签在showModalDialog中的应用
- Eclipse下Debug错误收集
- Android laucher总结
- left_meun.js
- jQuery根据ID、CLASS、等获取对象
- linux Could not reliably determine the server's fully qualified domain name
- 利用SNMP代理做服务器性能监控