summaryrefslogtreecommitdiff
path: root/include/private/sapp_mem.h
diff options
context:
space:
mode:
authorlijia <[email protected]>2021-09-17 14:12:44 +0800
committerlijia <[email protected]>2021-09-22 10:31:44 +0800
commitb1cd12941ae852f5e9cdff846826e9b87a00ee32 (patch)
tree4e5d58a4af6d4b8b29f91ddca7df89a97d404a60 /include/private/sapp_mem.h
parent0fb3d61362a017c9ed8b4aee856bb640329b6f9a (diff)
TSG-7770, sapp支持按不同模块统计自身所占用的内存.
Diffstat (limited to 'include/private/sapp_mem.h')
-rw-r--r--include/private/sapp_mem.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/include/private/sapp_mem.h b/include/private/sapp_mem.h
new file mode 100644
index 0000000..3f37a28
--- /dev/null
+++ b/include/private/sapp_mem.h
@@ -0,0 +1,75 @@
+#ifndef __SAPP_MEM_H_
+#define __SAPP_MEM_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MEM_STAT_GLOBAL_THREAD_ID -1 /* 全局变量内存的thread_id, 其实没有用, 保持接口一致, 用于非IO线程 */
+
+typedef enum{
+ __SAPP_MEM_TYPE_INIT = 0,
+
+ SAPP_MEM_STACK_LOCAL, /* 函数栈里临时申请的内存, 函数返回就会被释放 */
+
+ SAPP_MEM_FIX_GLOBAL_VAL,
+ SAPP_MEM_FIX_GLOBAL_STREAM,
+
+/*******************************************
+ 以上是全局变量, 或初始化后不变的内存
+*******************************************/
+ __SAPP_FIX_DYN_SEPARATOR,
+/*******************************************
+ 以下是多线程动态内存
+*******************************************/
+
+ SAPP_MEM_DYN_MEM_HDR, /* 为了增加这个统计, 增加的内存头部消耗 */
+ SAPP_MEM_DYN_IP_FRAG_PKT, /* 不太容易区别ipv4和ipv6, 此处统一计数 */
+ SAPP_MEM_DYN_TCP_STREAM,
+ SAPP_MEM_DYN_UDP_STREAM,
+ SAPP_MEM_DYN_TCP_HALF_STREAM, /* c2s, s2c半流结构 */
+ SAPP_MEM_DYN_UDP_HALF_STREAM,
+ SAPP_MEM_DYN_PLUG_CTRL, /* 表示插件管理必需的相关数据结构, 但不包括业务插件使用的内存 */
+ SAPP_MEM_DYN_TCP_UNORDER,
+ SAPP_MEM_DYN_TCP_SYN_OPT,
+ SAPP_MEM_DYN_TCP_POLLING_RAW_PKT,
+ SAPP_MEM_DYN_UDP_POLLING_RAW_PKT,
+ SAPP_MEM_DYN_TCP_DETAIL,
+ SAPP_MEM_DYN_UDP_DETAIL,
+ SAPP_MEM_DYN_TCP_FLOW_STAT,
+ SAPP_MEM_DYN_UDP_FLOW_STAT,
+ SAPP_MEM_DYN_TCP_PROJECT, /* 仅包括project必需的管理结构, 但不包括插件在project_add时申请的内存 */
+ SAPP_MEM_DYN_UDP_PROJECT,
+ SAPP_MEM_DYN_TCP_BRIDGE,
+ SAPP_MEM_DYN_UDP_BRIDGE,
+ SAPP_MEM_DYN_PADDR, /* 每层地址所占的内存, 就不分具体协议了, 太麻烦了!! */
+
+ __SAPP_MEM_TYPE_MAX,
+}sapp_mem_type_t;
+
+void *sapp_mem_malloc(sapp_mem_type_t type, int thread_seq, int size);
+void *sapp_mem_calloc(sapp_mem_type_t type, int thread_seq, int size);
+void sapp_mem_free(sapp_mem_type_t type, int thread_seq, void *data);
+void *sapp_mem_realloc(sapp_mem_type_t type, int thread_seq, void *old_ptr, int size);
+void sapp_mem_stat_output(void);
+
+#ifndef SAPP_FREE
+#define SAPP_FREE(type,tid, mem) do{if(mem){sapp_mem_free(type, tid, (void *)mem); mem = NULL;}}while(0)
+#endif
+
+
+#ifndef SAPP_GLOBAL_ALLOC
+#define SAPP_GLOBAL_ALLOC(size) sapp_mem_calloc(SAPP_MEM_FIX_GLOBAL_VAL, MEM_STAT_GLOBAL_THREAD_ID, size)
+#endif
+
+#ifndef SAPP_GLOBAL_FREE
+#define SAPP_GLOBAL_FREE(mem) do{if(mem){sapp_mem_free(SAPP_MEM_FIX_GLOBAL_VAL, MEM_STAT_GLOBAL_THREAD_ID, (void *)mem); mem = NULL;}}while(0)
+#endif
+
+extern int g_sapp_mem_use_dictator;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif \ No newline at end of file