acl  3.5.3.0
malloc.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 
4 #ifdef ACL_HOOK_NEW
5 
6 # if defined(_WIN32) || defined(_WIN64)
7 # ifdef NDEBUG
8 void* operator new(size_t n);
9 void operator delete(void *p);
10 # endif
11 # else
12 #include <new>
13 void* operator new(size_t n) throw (std::bad_alloc);
14 void operator delete(void *p) throw();
15 # endif
16 
17 #elif defined(ACL_CPP_DEBUG_MEM)
18 
19 /**
20  * 当需要检查 acl 库中的内存分配中是否存在内存泄露问题时,通过重载 new/delete
21  * 将对象的创建与销毁过记录下来,如果对象被创建后没有被释放,则内部就会标记为
22  * 一次内存泄露,使用者可以定时输出这些地址信息,查看在哪个文件创建的对象没有
23  * 被释放,要想使用此功能,需在 lib_acl_cpp/include/acl_cpp/acl_cpp_define.hpp
24  * 中的宏 "//#define ACL_CPP_DEBUG_MEM" 打开,同时应用需要在自己的源代码中包含
25  * 头文件:
26  * #include "acl_cpp/stdlib/malloc.hpp
27  * 最后,应用程序在创建对象时应使用 NEW 来替代 new.
28  */
29 void* operator new(size_t, const char*, const char*, int) throw();
30 void operator delete(void*) throw();
31 void operator delete(void*, size_t) throw();
32 
33 #define NEW new(__FILE__, __FUNCTION__, __LINE__)
34 
35 namespace acl {
36 
37 /**
38  * 启动内存监控过程
39  */
40 ACL_CPP_API void mem_checker_start(const char* logfile = NULL);
41 
42 /**
43  * 将当前内存状态显示至屏幕,使用者可以自己增加定时器定时调用此函数
44  */
45 ACL_CPP_API void mem_checker_show(void);
46 }
47 
48 #endif
49 
50 namespace acl {
51 
52 ACL_CPP_API void acl_slice_init(void);
53 
54 /**
55  * 内存分配函数
56  * @param size {size_t} 需要分配的尺寸大小
57  * @param filename {const char*} 源程序名字
58  * @param funcname {const char*} 函数名
59  * @param lineno {int} 源程序行号
60  * @return {void*} 分配的内存地址,如果分配内存失败,则直接abort
61  */
62 ACL_CPP_API void* acl_new(size_t size, const char* filename,
63  const char* funcname, int lineno);
64 
65 
66 /**
67  * 释放内存函数
68  * @param ptr {void*} 内存地址
69  * @param filename {const char*} 源程序名字
70  * @param funcname {const char*} 函数名
71  * @param lineno {int} 源程序行号
72  */
73 ACL_CPP_API void acl_delete(void *ptr, const char* filename,
74  const char* funcname, int lineno);
75 
76 }
ACL_CPP_API void acl_delete(void *ptr, const char *filename, const char *funcname, int lineno)
ACL_CPP_API void * acl_new(size_t size, const char *filename, const char *funcname, int lineno)
ACL_CPP_API void acl_slice_init(void)
#define ACL_CPP_API