Chinaunix首页 | 论坛 | 博客
  • 博客访问: 281887
  • 博文数量: 46
  • 博客积分: 2021
  • 博客等级: 大尉
  • 技术积分: 406
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-03 13:00
文章分类

全部博文(46)

文章存档

2011年(1)

2010年(9)

2009年(2)

2007年(13)

2006年(21)

我的朋友

分类: C/C++

2010-03-11 09:43:47

pool.c文件分析:

当程序里有大量的频繁的动态分配内存的情况,如果每次分配后都要记得释放该内存,往往会因为各种原因没有释放,从而导致内存泄露,pool提供了这样的机制,不需要为每次分配的内存都要调用释放内存函数,而是在某一时刻集中释放所有动态分配的内存,这种机制的好处是:1,增强了代码的可读性,方便程序编写,不需要一个malloc函数必须对应一个free函数;2,有效的避免了内存泄露的发生。

pool.h文件中提供的接口:

使用到的结构体:
struct pheap    用于保存单次分配的内存
struct pfree    
typedef struct pool_struct



pool_t pool_new(char *file, int line);
分配一个空的pool_t, 无需判断返回的指针是否是NULL,pool_new会保证分配成功

struct pfree *_pool_free(pool_t p, pool_cleanup_t f, void *arg)
为struct pheap设置一个清理函数

void _pool_heap_free(void *arg)
释放pheap->block的内存以及pheap自身内存,_pool_free函数传入的第二个参数就是这个函数

void _pool_cleanup_append(pool_t p, struct pfree *pf)
将pf增加到p->cleanup链表末尾

struct pheap *_pool_heap(pool_t p, int size);
分配size大小的pheap,并使用_pool_free设置_pool_heap_free为pheap清理函数,并且将清理函数增加到p->cleanup的末尾

pool_t pool_new_heap(int size, char *file, int line);
创建一个pool_t,并且调用_pool_heap分配size大小的pheap,以及设置相应的清理函数

void *pmalloc(pool_t p, int size)
使用pmalloc函数替代malloc函数分配内存

void *pmalloc_x(pool_t p, int size, char c)
和pmalloc函数类似,但可以在分配成功后对已经分配的内存进行初始化为c

void *pmalloco(pool_t p, int size)
分配size大小内存,并且将内存初始化为0

char *pstrdup(pool_t p, const char *src)
pstrdup类似strdup函数,区别在于内存是在pool种分配

char *pstrdupx(pool_t p, const char *src, int len)
和pstrdup类似,区别在于生成新字符串的大小不是取决于src大小,而是使用拷贝指定长度len的数据

int pool_size(pool_t p)
返回pool目前所分配内存的大小

void pool_free(pool_t p)
释放所有动态分配的内存,使用pmalloc pstrdup函数分配的内存,集中在这里释放

void pool_cleanup(pool_t p, pool_cleanup_t f, void *arg
有些内存不是通过pool分配的也可以使用pool_cleanup注册后,当pool_free时,集中释放

void pool_stat(int full)
在DEBUG模式下显示一些调试信息
阅读(1830) | 评论(0) | 转发(0) |
0

上一篇:erlang学习笔记

下一篇:libevent: evbuffer缓冲

给主人留下些什么吧!~~