文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>APACHE学习笔记(三) APR 内存管理

APACHE学习笔记(三) APR 内存管理

时间:2007-05-11  来源:Givemefive

APACHE 内存管理方式:
第一种:
    直接调用APR的内存分配:mytype* myvar = apr_palloc(pool, sizeof(mytype)) ;不需要自己free,APR负责自动在pool上注册free,当pool被free的时候,自动执行free myvar.
第二种:
    自己调用malloc分配内存:mytype* myvar = malloc(sizeof(mytype)) ;再注册free到一个pool上面apr_pool_cleanup_register(pool, myvar, free,apr_pool_cleanup_null);然后当这个pool被free的时候,APR会调用free,然后自动释放这个myvar.
第三种:
    自己调用malloc分配内存:mytype* myvar = malloc(sizeof(mytype)) ;再注册free到一个pool上面apr_pool_cleanup_register(pool, myvar, free,apr_pool_cleanup_null);然后自己手动free掉myvar.这个时候,为了避免pool被free的时候,APR会调用free,而那片内存已经被free掉了,要调用apr_pool_cleanup_kill取消注册的free.
第四种:
    自己调用malloc分配内存:mytype* myvar = malloc(sizeof(mytype)) ;自己调用free.
   
APACHE 中一些pool的生命周期:
request pool :和HTTP Request的一样.
process pool :和Server的一样.
connection pool :和TCP连接的一样.

APR中的一些数据结构:
数组 :apr_array_header_t
    创建的时候有一个初始大小,但数组可以变大.
例子:
/* Allocate an array of type my_type */
apr_array_header_t* arr = apr_array_make(pool, sz, sizeof(my_type));
/* Allocate an uninitialized element on the array*/
my_type* newelt = apr_array_push(arr) ;
/* Now fill in the values of elt */
newelt->foo = abc ;
newelt->bar = "foo" ;
/* Pop the last-in element */
my_type* oldelt = apr_array_pop(arr) ;
/* Iterate over all elements */
for (i = 0; i < arr->nelts; i++)
{
    /* A C++ reference is the clearest way to show this */
    my_type& elt = arr->elts[i] ;
}

表格:apr_table_t
    基于数组的key/value对.(high-level).有初始大小
注:apr_table_merge和apr_table_overlap是对于HTTP头和环境变量操作理想的实现.

哈希表:apr_hash_t
    key/value对.(low-level).没有初始大小.

队列:apr_queue_t

环:apr_ring,不是数据结构,而是一堆宏定义.
(bucket和brigade)

处理URL的 :apr_uri_t
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载