acl  3.5.3.0
acl_malloc.h
浏览该文件的文档.
1 #ifndef ACL_MALLOC_INCLUDE_H
2 #define ACL_MALLOC_INCLUDE_H
3 
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 
8 #include "acl_define.h"
9 
10 /*
11  * Memory alignment of memory allocator results.
12  * By default we align for doubles.
13  */
14 
15 #ifndef ALIGN_TYPE
16 # if defined(__hpux) && defined(__ia64)
17 # define ALIGN_TYPE __float80
18 # elif defined(__ia64__)
19 # define ALIGN_TYPE long double
20 # else
21 # define ALIGN_TYPE size_t
22 # endif
23 #endif
24 
25 ACL_API int *acl_memory_debug_start(void);
26 ACL_API void acl_memory_debug_stop(void);
27 ACL_API void acl_memory_debug_stack(int onoff);
28 ACL_API void acl_memory_stat(void);
29 ACL_API void acl_memory_alloc_stat(void);
30 
31 /**
32  * 打开动态内存池功能
33  * @param max_size {size_t} 内存池最大空间大小,单位为字节
34  * @param use_mutex {int} 内存池内部是否采用互斥锁,如果是多线程程序则应该
35  * 设置 use_mutex 为非0值
36  */
37 ACL_API void acl_mempool_open(size_t max_size, int use_mutex);
38 
39 /**
40  * 关闭内存池功能
41  */
42 ACL_API void acl_mempool_close(void);
43 
44 /**
45  * 当内存池打开后,可以通过此函数控制内存池状态
46  */
47 ACL_API void acl_mempool_ctl(int name, ...);
48 #define ACL_MEMPOOL_CTL_END 0 /**< 结束标志 */
49 #define ACL_MEMPOOL_CTL_MUTEX 1 /**< 控制内存池是否加锁 */
50 #define ACL_MEMPOOL_CTL_DISABLE 2 /**< 是否关闭内存池 */
51 
52 /**
53  * 当前内存池已经分配的内存大小
54  * @return {int} 已经分配的内存大小
55  */
56 ACL_API int acl_mempool_total_allocated(void);
57 
58 /**
59  * 将当前的内存池状态信息输出至日志或屏幕中
60  */
61 ACL_API void acl_mempool_status(void);
62 
63 /*---------------- ACL库中缺省的内存分配、释放等管理接口 -------------------*/
64 
65 /**
66  * 获得当前内存指针的一些状态信息,如该内存的实际大小与对外分配大小
67  * @param filename {const char*} 调用该函数的文件名,可以为空
68  * @param line {int} 调用该函数所在源文件中的行数
69  * @param ptr {void*} 动态分配的内存外部地址
70  * @param len {size_t*} 存储该内存的外部可用大小
71  * @param real_len {size*} 存储该内存的实际大小(因为内部有一些控制字节)
72  */
73 ACL_API void acl_default_memstat(const char *filename, int line,
74  void *ptr, size_t *len, size_t *real_len);
75 
76 ACL_API void acl_default_meminfo(void);
77 
78 /**
79  * 设置内存分配最大报警值,即当调用者分配的内存大小达到此报警值后,内部会自动
80  * 记录报警日志,同时将调用堆栈打印至日志中;内部缺少值是 100000000
81  * @param len {size_t} 最大报警值,该值必须 > 0
82  */
83 ACL_API void acl_default_set_memlimit(size_t len);
84 
85 /**
86  * 获得当前所设置的内存分配最大报警值大小(内部缺省值是 100000000)
87  * @return {size_t}
88  */
89 ACL_API size_t acl_default_get_memlimit(void);
90 
91 /**
92  * ACL库中缺省的内存分配器接口, 分配内存但并不初始化所分配内存的内容
93  * 类似于标准库中的 malloc
94  * @param filename {const char*} 调用该函数的文件名,可以为空
95  * @param line {int} 调用该函数所在源文件中的行数
96  * @param size {size_t} 需要的内存大小
97  * @return {void*} 分配的可用地址, 如果分配失败,则内部会自动coredump
98  * 需要调用 acl_default_free 释放
99  */
100 ACL_API void *acl_default_malloc(const char *filename, int line, size_t size);
101 
102 /**
103  * ACL库中缺省的内存分配器接口, 分配内存并初始化所分配内存的内容为0
104  * 类似于标准库中的 calloc
105  * @param filename {const char*} 调用该函数的文件名,可以为空
106  * @param line {int} 调用该函数所在源文件中的行数
107  * @param nmemb {size_t} 内存块的个数
108  * @param size {size_t} 每个内存块的大小
109  * @return {void*} 分配的可用地址, 如果分配失败,则内部会自动coredump
110  * 需要调用 acl_default_free 释放
111  */
112 ACL_API void *acl_default_calloc(const char *filename, int line,
113  size_t nmemb, size_t size);
114 
115 /**
116  * ACL库中缺省的内存分配器接口, 类似于标准库的 realloc
117  * @param filename {const char*} 调用该函数的文件名,可以为空
118  * @param line {int} 调用该函数所在源文件中的行数
119  * @param ptr {void*} 之前用ACL库所分配的内存地址
120  * @param size {size_t} 需要的内存大小
121  * @return {void*} 分配的可用地址, 如果分配失败,则内部会自动coredump
122  * 需要调用 acl_default_free 释放
123  */
124 ACL_API void *acl_default_realloc(const char *filename, int line,
125  void *ptr, size_t size);
126 
127 /**
128  * 复制字符串,类似于标准库中的 strdup
129  * @param filename {const char*} 调用该函数的文件名,可以为空
130  * @param line {int} 调用该函数所在源文件中的行数
131  * @param str {const char*} 源字符串地址
132  * @return {char*} 新复制的字符串地址,需要调用 acl_default_free 释放
133  */
134 ACL_API char *acl_default_strdup(const char *filename, int line, const char *str);
135 
136 /**
137  * 复制字符串,但限制最大字符串长度,类似于标准库中的 strndup
138  * @param filename {const char*} 调用该函数的文件名,可以为空
139  * @param line {int} 调用该函数所在源文件中的行数
140  * @param str {const char*} 源字符串地址
141  * @param len {size_t} 限制新字符串的最大长度值
142  * @return {char*} 新复制的字符串地址,需要调用 acl_default_free 释放
143  */
144 ACL_API char *acl_default_strndup(const char *filename, int line,
145  const char *str, size_t len);
146 
147 /**
148  * 复制内存数据
149  * @param filename {const char*} 调用该函数的文件名,可以为空
150  * @param line {int} 调用该函数所在源文件中的行数
151  * @param ptr {const void*} 源内存地址
152  * @param len {size_t} 源内存区域的长度
153  * @return {void*} 新复制的内存地址
154  */
155 ACL_API void *acl_default_memdup(const char *filename, int line,
156  const void *ptr, size_t len);
157 
158 /**
159  * 释放由 acl_devault_xxx 所分配的内存动态内存
160  * @param filename {const char*} 调用该函数的文件名,可以为空
161  * @param line {int} 调用该函数所在源文件中的行数
162  */
163 ACL_API void acl_default_free(const char *filename, int line, void *ptr);
164 
165 /*----- acl_mymalloc.h 内存管理接口中的宏调用所使用的内存管理函数接口 ------*/
166 
167 /* 该函数接口集其实是调用了其它的内存管理来进行内存的分配与释放等管理操作的,
168  * 它提供了高级宏调用的外部使用接口,方便用户操作。
169  */
170 
171 ACL_API void *acl_malloc_glue(const char *filename, int line, size_t size);
172 ACL_API void *acl_calloc_glue(const char *filename, int line, size_t nmemb, size_t size);
173 ACL_API void *acl_realloc_glue(const char *filename, int line, void *ptr, size_t size);
174 ACL_API char *acl_strdup_glue(const char *filename, int line, const char *str);
175 ACL_API char *acl_strndup_glue(const char *filename, int line, const char *str, size_t len);
176 ACL_API void *acl_memdup_glue(const char *filename, int line, const void *ptr, size_t len);
177 ACL_API void acl_free_glue(const char *filename, int line, void *ptr);
178 ACL_API void acl_free_fn_glue(void *ptr);
179 
180 #ifdef __cplusplus
181 }
182 #endif
183 
184 #endif
HTTP_API void const char * name
Definition: lib_http.h:620
ACL_API int acl_mempool_total_allocated(void)
ACL_API void acl_memory_debug_stack(int onoff)
ACL_API void acl_default_memstat(const char *filename, int line, void *ptr, size_t *len, size_t *real_len)
ACL_API void acl_mempool_status(void)
ACL_API char * acl_strdup_glue(const char *filename, int line, const char *str)
ACL_API void acl_default_free(const char *filename, int line, void *ptr)
ACL_API int * acl_memory_debug_start(void)
ACL_API char * acl_strndup_glue(const char *filename, int line, const char *str, size_t len)
ACL_API void * acl_default_calloc(const char *filename, int line, size_t nmemb, size_t size)
ACL_API void acl_memory_debug_stop(void)
ACL_API void * acl_calloc_glue(const char *filename, int line, size_t nmemb, size_t size)
ACL_API void acl_default_set_memlimit(size_t len)
ACL_API void acl_memory_alloc_stat(void)
ACL_API void * acl_default_malloc(const char *filename, int line, size_t size)
ACL_API void * acl_default_realloc(const char *filename, int line, void *ptr, size_t size)
ACL_API void acl_mempool_ctl(int name,...)
ACL_API void acl_free_fn_glue(void *ptr)
ACL_API size_t acl_default_get_memlimit(void)
ACL_API char * acl_default_strndup(const char *filename, int line, const char *str, size_t len)
ACL_API void acl_memory_stat(void)
ACL_API void * acl_realloc_glue(const char *filename, int line, void *ptr, size_t size)
ACL_API char * acl_default_strdup(const char *filename, int line, const char *str)
ACL_API void * acl_default_memdup(const char *filename, int line, const void *ptr, size_t len)
ACL_API void * acl_malloc_glue(const char *filename, int line, size_t size)
ACL_API void acl_default_meminfo(void)
ACL_API void acl_mempool_open(size_t max_size, int use_mutex)
ACL_API void * acl_memdup_glue(const char *filename, int line, const void *ptr, size_t len)
ACL_API void acl_free_glue(const char *filename, int line, void *ptr)
ACL_API void acl_mempool_close(void)