acl  3.5.3.0
acl_dbuf_pool.h
浏览该文件的文档.
1 #ifndef ACL_DBUF_POOL_INCLUDE_H
2 #define ACL_DBUF_POOL_INCLUDE_H
3 
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 
8 typedef struct ACL_DBUF_POOL ACL_DBUF_POOL;
9 
10 /**
11  * 创建内存池对象
12  * @param block_size {size_t} 内存池中每个连续内存块的大小(字节)
13  * @return {ACL_DBUF_POOL*} 返回非 NULL 对象
14  */
15 ACL_API ACL_DBUF_POOL *acl_dbuf_pool_create(size_t block_size);
16 
17 /**
18  * 重置内存池状态,会将多余的内存数据块释放
19  * @param pool {ACL_DBUF_POOL*} 内存池对象
20  * @param off {size_t} 要求保留的最小内存相对偏移位置
21  * @return {int} 返回 0 表示操作成功,非 0 表示失败
22  */
23 ACL_API int acl_dbuf_pool_reset(ACL_DBUF_POOL *pool, size_t off);
24 
25 /**
26  * 销毁内存池
27  * @param pool {ACL_DBUF_POOL*} 对象池对象
28  */
29 ACL_API void acl_dbuf_pool_destroy(ACL_DBUF_POOL *pool);
30 
31 /**
32  * 分配指定长度的内存
33  * @param pool {ACL_DBUF_POOL*} 对象池对象
34  * @param len {size_t} 需要分配的内存大小
35  * @return {void*} 新分配的内存地址
36  */
37 ACL_API void *acl_dbuf_pool_alloc(ACL_DBUF_POOL *pool, size_t len);
38 
39 /**
40  * 分配指定长度的内存并将内存区域清零
41  * @param pool {ACL_DBUF_POOL*} 对象池对象
42  * @param len {size_t} 需要分配的内存长度
43  * @return {void*} 新分配的内存地址
44  */
45 ACL_API void *acl_dbuf_pool_calloc(ACL_DBUF_POOL *pool, size_t len);
46 
47 /**
48  * 根据输入的字符串动态创建新的内存并将字符串进行复制,类似于 strdup
49  * @param pool {ACL_DBUF_POOL*} 对象池对象
50  * @param s {const char*} 源字符串
51  * @return {char*} 新复制的字符串地址
52  */
53 ACL_API char *acl_dbuf_pool_strdup(ACL_DBUF_POOL *pool, const char *s);
54 
55 /**
56  * 根据输入的字符串动态创建新的内存并将字符串进行复制,类似于 strdup
57  * @param pool {ACL_DBUF_POOL*} 对象池对象
58  * @param s {const char*} 源字符串
59  * @param len {size_t} 限定的最大字符串长度
60  * @return {char*} 新复制的字符串地址
61  */
62 ACL_API char *acl_dbuf_pool_strndup(ACL_DBUF_POOL *pool,
63  const char *s, size_t len);
64 
65 /**
66  * 根据输入的内存数据动态创建内存并将数据进行复制
67  * @param pool {ACL_DBUF_POOL*} 对象池对象
68  * @param addr {const void*} 源数据内存地址
69  * @param len {size_t} 源数据长度
70  * @return {void*} 新复制的数据地址
71  */
72 ACL_API void *acl_dbuf_pool_memdup(ACL_DBUF_POOL *pool,
73  const void *addr, size_t len);
74 
75 /**
76  * 归还由内存池分配的内存
77  * @param pool {ACL_DBUF_POOL*} 对象池对象
78  * @param addr {const void*} 由内存池分配的内存地址
79  * @return {int} 如果该内存地址非内存池分配或释放多次,则返回 -1,操作成功则
80  * 返回 0
81  */
82 ACL_API int acl_dbuf_pool_free(ACL_DBUF_POOL *pool, const void *addr);
83 
84 /**
85  * 保留由内存池分配的某段地址,以免当调用 reset 时被提前释放掉
86  * @param pool {ACL_DBUF_POOL*} 对象池对象
87  * @param addr {const void*} 由内存池分配的内存地址
88  * @return {int} 操作成功则返回 0,如果该内存地址非内存池分配,则返回 -1
89  */
90 ACL_API int acl_dbuf_pool_keep(ACL_DBUF_POOL *pool, const void *addr);
91 
92 /**
93  * 取消保留由内存池分配的某段地址,以便于调用 dbuf_reset 时被释放掉
94  * @param pool {ACL_DBUF_POOL*} 对象池对象
95  * @param addr {const void*} 由内存池分配的内存地址
96  * @return {int} 操作成功则返回 0,如果该内存地址非内存池分配,则返回 -1
97  */
98 ACL_API int acl_dbuf_pool_unkeep(ACL_DBUF_POOL *pool, const void *addr);
99 
100 /**
101  * 内部测试用函数
102  */
103 ACL_API void acl_dbuf_pool_test(size_t max);
104 
105 #ifdef __cplusplus
106 }
107 #endif
108 
109 #endif
ACL_API void * acl_dbuf_pool_calloc(ACL_DBUF_POOL *pool, size_t len)
ACL_API int acl_dbuf_pool_free(ACL_DBUF_POOL *pool, const void *addr)
ACL_API int acl_dbuf_pool_keep(ACL_DBUF_POOL *pool, const void *addr)
ACL_API char * acl_dbuf_pool_strndup(ACL_DBUF_POOL *pool, const char *s, size_t len)
ACL_API void * acl_dbuf_pool_memdup(ACL_DBUF_POOL *pool, const void *addr, size_t len)
ACL_API int acl_dbuf_pool_reset(ACL_DBUF_POOL *pool, size_t off)
ACL_API void * acl_dbuf_pool_alloc(ACL_DBUF_POOL *pool, size_t len)
struct ACL_DBUF_POOL ACL_DBUF_POOL
Definition: acl_dbuf_pool.h:8
ACL_API char * acl_dbuf_pool_strdup(ACL_DBUF_POOL *pool, const char *s)
ACL_API void acl_dbuf_pool_destroy(ACL_DBUF_POOL *pool)
ACL_API ACL_DBUF_POOL * acl_dbuf_pool_create(size_t block_size)
ACL_API int acl_dbuf_pool_unkeep(ACL_DBUF_POOL *pool, const void *addr)
ACL_API void acl_dbuf_pool_test(size_t max)