⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3.txt

📁 这是用C写的中文分词程序
💻 TXT
字号:
内存池(apr_pool_t)
大多数libapr的API都依赖于内存池,借助内存池,简化了内存块的管理。想像一下没有内存池系统的情况:你申请一些内存块就必需逐个释放它们,例如如果你申请了10个内存块,你必需释放10次,否则,你将遭受内存泄露的错误。内存池解决了这个令人感到繁琐的问题,在申请一个内存池之后,你可以从内存池中申请多个内存块,释放它们的时候,你所需要做的就是销毁内存池,这样你就可以释放所有的内存块了。这有两个优点,第一,它可以预防内存泄露的错误;第二,分配内存块的开销相对变低了。从某种意义上说,内存池迫使你遵循面向会话编程,一个内存池就是一种会话内容,这样,处于同一个内存池中的对象就有相同的生命周期,你可以通过控制会话内容来控制对象。在一个会话的开始,你创建了一个内存池,接着,你在内存池中创建了一些对象,你不需要去关心这些对象的生命周期,最后,在会话结束的时候,你只需要将那个内存池销毁就可以了。

注:通常,对象生命周期控制是程序开发最困难的部分,因此,针对这个问题还存在有一些技术,例如smart pointer,垃圾回收等等。需要注意,同时使用这些技术有一定的难度,自从内存池成为这其中的一项技术以后,你不得不非常小心的使用它们。

注:在将来,libapr的内存池将变得不再那么重要。参见http://mail-archives.apache.org/mod_mbox/apr-dev/200502.mbox/%3c1f1d9820502241330123f955f@mail.gmail.com%3e.

下面有三个基本的API函数:
/* 摘自 apr_pools.h */

    APR_DECLARE(apr_status_t) apr_pool_create(apr_pool_t **newpool,
                                              apr_pool_t *parent);
    APR_DECLARE(void *) apr_palloc(apr_pool_t *p, apr_size_t size);
    APR_DECLARE(void) apr_pool_destroy(apr_pool_t *p);

我们使用apr_pool_create()函数创建一个内存池,这个内存池将一直存活,直到你调用apr_pool_destroy()函数以后被销毁。apr_pool_create()的第一个参数是一个结果输出参数,是一个新创建的apr_pool_t类型的内存池对象。通过调用apr_palloc()来申请指定大小的内存块,具体使用方法见mp-sample.c。


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -