acl  3.5.3.0
acl::dbuf_pool类 参考

#include <dbuf_pool.hpp>

+ acl::dbuf_pool 的协作图:

Public 成员函数

 dbuf_pool ()
 
void destroy ()
 
void * operator new (size_t size, size_t nblock=2)
 
void operator delete (void *ptr)
 
bool dbuf_reset (size_t reserve=0)
 
void * dbuf_alloc (size_t len)
 
void * dbuf_calloc (size_t len)
 
char * dbuf_strdup (const char *s)
 
char * dbuf_strndup (const char *s, size_t len)
 
void * dbuf_memdup (const void *addr, size_t len)
 
bool dbuf_free (const void *addr)
 
bool dbuf_keep (const void *addr)
 
bool dbuf_unkeep (const void *addr)
 
ACL_DBUF_POOLget_dbuf ()
 
 ~dbuf_pool ()
 

详细描述

会话类的内存链管理类,该类仅提供内存分配函数,在整个类对象被析构时该内存链 会被一次性地释放,该类适合于需要频繁分配一些大小不等的小内存的应用; 该类实际上是封装了 lib_acl 中的 ACL_DBUF_POOL 结构及方法

在文件 dbuf_pool.hpp17 行定义.

构造及析构函数说明

◆ dbuf_pool()

acl::dbuf_pool::dbuf_pool ( )

该类对象必须动态创建

◆ ~dbuf_pool()

acl::dbuf_pool::~dbuf_pool ( )

成员函数说明

◆ dbuf_alloc()

void* acl::dbuf_pool::dbuf_alloc ( size_t  len)

分配指定长度的内存

参数
len{size_t} 需要分配的内存长度,当内存比较小时(小于构造函数 中的 block_size)时,所分配的内存是在 dbuf_pool 所管理的内存链上, 当内存较大时会直接使用 malloc 进行分配
返回
{void*} 新分配的内存地址

◆ dbuf_calloc()

void* acl::dbuf_pool::dbuf_calloc ( size_t  len)

分配指定长度的内存并将内存区域清零

参数
len{size_t} 需要分配的内存长度
返回
{void*} 新分配的内存地址

◆ dbuf_free()

bool acl::dbuf_pool::dbuf_free ( const void *  addr)

归还由内存池分配的内存

参数
addr{const void*} 由内存池分配的内存地址
返回
{bool} 如果该内存地址非内存池分配或释放多次,则返回 false

◆ dbuf_keep()

bool acl::dbuf_pool::dbuf_keep ( const void *  addr)

保留由内存池分配的某段地址,以免当调用 dbuf_reset 时被提前释放掉

参数
addr{const void*} 由内存池分配的内存地址
返回
{bool} 如果该内存地址非内存池分配,则返回 false

◆ dbuf_memdup()

void* acl::dbuf_pool::dbuf_memdup ( const void *  addr,
size_t  len 
)

根据输入的内存数据动态创建内存并将数据进行复制

参数
addr{const void*} 源数据内存地址
len{size_t} 源数据长度
返回
{void*} 新复制的数据地址

◆ dbuf_reset()

bool acl::dbuf_pool::dbuf_reset ( size_t  reserve = 0)

重置内存池的状态以便于重复使用该内存池对象

参数
reserve{size_t} 若该值 > 0,则需要指定额外保留的内存大小, 该大小必须小于等于已经在该内存池对象分配的大小
返回
{bool} 如果输入参数非法,则返回 false

◆ dbuf_strdup()

char* acl::dbuf_pool::dbuf_strdup ( const char *  s)

根据输入的字符串动态创建新的内存并将字符串进行复制,类似于 strdup

参数
s{const char*} 源字符串
返回
{char*} 新复制的字符串地址

◆ dbuf_strndup()

char* acl::dbuf_pool::dbuf_strndup ( const char *  s,
size_t  len 
)

根据输入的字符串动态创建新的内存并将字符串进行复制,类似于 strdup

参数
s{const char*} 源字符串
len{size_t} 限制所复制字符串的最大长度
返回
{char*} 新复制的字符串地址

◆ dbuf_unkeep()

bool acl::dbuf_pool::dbuf_unkeep ( const void *  addr)

取消保留由内存池分配的某段地址,以便于调用 dbuf_reset 时被释放掉

参数
addr{const void*} 由内存池分配的内存地址
返回
{bool} 如果该内存地址非内存池分配,则返回 false

◆ destroy()

void acl::dbuf_pool::destroy ( )

该类对象必须要动态创建,所以隐藏了析构函数,使用者需要调用 destroy 函数来销毁动态对象

◆ get_dbuf()

ACL_DBUF_POOL* acl::dbuf_pool::get_dbuf ( void  )
inline

获得内部 ACL_DBUF_POOL 对象,以便于操作 C 接口的内存池对象

返回
{ACL_DBUF_POOL*}

在文件 dbuf_pool.hpp116 行定义.

117  {
118  return pool_;
119  }

◆ operator delete()

void acl::dbuf_pool::operator delete ( void *  ptr)

◆ operator new()

void* acl::dbuf_pool::operator new ( size_t  size,
size_t  nblock = 2 
)

重载 new/delete 操作符,使 dbuf_pool 对象本身也创建在内存池上, 从而减少了 malloc/free 的次数

参数
size{size_t} 由编译传入的 dbuf_pool 对象的长度大小
nblock{size_t} 内部采用的内存块(4096)的倍数

该类的文档由以下文件生成: