📄 mem_chk.h
字号:
/************************************************************************//* SISCO SOFTWARE MODULE HEADER *****************************************//************************************************************************//* (c) Copyright Systems Integration Specialists Company, Inc., *//* 1986-1997 All Rights Reserved *//* *//* MODULE NAME : mem_chk.h *//* PRODUCT(S) : General Use *//* *//* MODULE DESCRIPTION : *//* This module contains the declarations of the dynamic memory *//* handling functions. *//* *//* MODIFICATION LOG : *//* Date Who Rev Comments *//* -------- --- ------ ------------------------------------------- *//* 08/20/01 JRB 12 chk_* functions chged to nd_chk_*. *//* chk_* names are now ALWAYS macros. *//* Make 4 sets of macros depending on whether *//* DEBUG_SISCO and/or SMEM_ENABLE defined. *//* Don't define SMEM_ENABLE, do from makefiles. *//* Remove logging backward compatibility stuff. *//* 08/06/01 RKR 11 S_THISFILE was removed, need a thisFileName *//* 03/19/01 JRB 10 Move SMEM context defs to "smem.h". *//* 01/25/01 DSF 09 new/delete checks *//* 11/01/00 MDE 08 Additional SMEM work *//* 01/21/00 MDE 07 Added SMEM support *//* 09/13/99 MDE 06 Added SD_CONST modifiers *//* 01/26/98 MDE 05 Added 'chk_strdup' *//* 12/08/98 MDE 04 Added 'ST_BOOLEAN m_auto_hw_log' *//* 10/08/98 MDE 03 Migrated to updated SLOG interface *//* 10/14/97 DSF 02 m_bad_ptr_val is now a pointer *//* 09/16/97 DSF 01 chk_debug_en is UINT *//* 04/02/97 DTL 7.00 MMSEASE 7.0 release. See MODL70.DOC for *//* history. *//************************************************************************/#ifndef MEM_CHK_INCLUDED#define MEM_CHK_INCLUDED#ifdef __cplusplusextern "C" {#endif#include <stdio.h>#ifdef SMEM_ENABLE#include "smem.h"#endif/************************************************************************//* MEM_CHK MACROS and FUNCTION PROTOTYPES *//* Memory allocation macros. There are 4 sets of macros depending on *//* DEBUG_SISCO and SMEM_ENABLE. Each set of macros calls a unique set *//* of functions. *//* The DEBUG macros use thisFileName (instead of __FILE__) to reduce *//* memory usage. Any file using these macros MUST contain the following *//* statement: *//* static char *thisFileName = __FILE__; *//************************************************************************/#if defined(SMEM_ENABLE) #if defined(DEBUG_SISCO) #define M_MALLOC(ctx,x) x_m_malloc (ctx,x, thisFileName,__LINE__) #define M_CALLOC(ctx,x,y) x_m_calloc (ctx,x,y,thisFileName,__LINE__) #define M_REALLOC(ctx,x,y) x_m_realloc (ctx,x,y,thisFileName,__LINE__) #define M_STRDUP(ctx,x) x_m_strdup (ctx,x, thisFileName,__LINE__) #define M_FREE(ctx,x) x_m_free (ctx,x, thisFileName,__LINE__) #define chk_malloc(x) x_m_malloc (MSMEM_GEN,x, thisFileName,__LINE__) #define chk_calloc(x,y) x_m_calloc (MSMEM_GEN,x,y,thisFileName,__LINE__) #define chk_realloc(x,y) x_m_realloc (MSMEM_GEN,x,y,thisFileName,__LINE__) #define chk_strdup(x) x_m_strdup (MSMEM_GEN,x, thisFileName,__LINE__) #define chk_free(x) x_m_free (MSMEM_GEN,x, thisFileName,__LINE__) ST_VOID *x_m_malloc (SMEM_CONTEXT *smem_ctx, ST_UINT size, SD_CONST ST_CHAR *SD_CONST file, SD_CONST ST_INT line); ST_VOID *x_m_calloc (SMEM_CONTEXT *smem_ctx, ST_UINT num, ST_UINT size, SD_CONST ST_CHAR *SD_CONST file, SD_CONST ST_INT line); ST_VOID *x_m_realloc (SMEM_CONTEXT *smem_ctx, ST_VOID *old, ST_UINT size, SD_CONST ST_CHAR *SD_CONST file, SD_CONST ST_INT line); ST_VOID x_m_free (SMEM_CONTEXT *smem_ctx, ST_VOID *ptr, SD_CONST ST_CHAR *SD_CONST file, SD_CONST ST_INT line); ST_CHAR *x_m_strdup (SMEM_CONTEXT *smem_ctx, ST_CHAR *str, SD_CONST ST_CHAR *SD_CONST file, SD_CONST ST_INT line); #else /* !DEBUG_SISCO */ #define M_MALLOC(ctx,x) nd_m_malloc (ctx,x) #define M_CALLOC(ctx,x,y) nd_m_calloc (ctx,x,y) #define M_REALLOC(ctx,x,y) nd_m_realloc (ctx,x,y) #define M_STRDUP(ctx,x) nd_m_strdup (ctx,x) #define M_FREE(ctx,x) nd_m_free (ctx,x) #define chk_malloc(x) nd_m_malloc (MSMEM_GEN,x) #define chk_calloc(x,y) nd_m_calloc (MSMEM_GEN,x,y) #define chk_realloc(x,y) nd_m_realloc (MSMEM_GEN,x,y) #define chk_strdup(x) nd_m_strdup (MSMEM_GEN,x) #define chk_free(x) nd_m_free (MSMEM_GEN,x) ST_VOID *nd_m_malloc (SMEM_CONTEXT *smem_ctx, ST_UINT size); ST_VOID *nd_m_calloc (SMEM_CONTEXT *smem_ctx, ST_UINT num, ST_UINT size); ST_VOID *nd_m_realloc (SMEM_CONTEXT *smem_ctx, ST_VOID *old, ST_UINT size); ST_VOID nd_m_free (SMEM_CONTEXT *smem_ctx, ST_VOID *ptr); ST_CHAR *nd_m_strdup (SMEM_CONTEXT *smem_ctx, ST_CHAR *str); #endif /* !DEBUG_SISCO */#else /* !SMEM_ENABLE */ #if defined(DEBUG_SISCO) #define M_MALLOC(ctx,x) x_chk_malloc (x, thisFileName,__LINE__) #define M_CALLOC(ctx,x,y) x_chk_calloc (x,y,thisFileName,__LINE__) #define M_REALLOC(ctx,x,y) x_chk_realloc (x,y,thisFileName,__LINE__) #define M_STRDUP(ctx,x) x_chk_strdup (x, thisFileName,__LINE__) #define M_FREE(ctx,x) x_chk_free (x, thisFileName,__LINE__) #define chk_malloc(x) x_chk_malloc (x, thisFileName,__LINE__) #define chk_calloc(x,y) x_chk_calloc (x,y,thisFileName,__LINE__) #define chk_realloc(x,y) x_chk_realloc (x,y,thisFileName,__LINE__) #define chk_strdup(x) x_chk_strdup (x, thisFileName,__LINE__) #define chk_free(x) x_chk_free (x, thisFileName,__LINE__) ST_VOID *x_chk_realloc (ST_VOID *old, ST_UINT size, SD_CONST ST_CHAR *SD_CONST file, SD_CONST ST_INT line); ST_VOID *x_chk_malloc (ST_UINT size, SD_CONST ST_CHAR *SD_CONST file, SD_CONST ST_INT line); ST_VOID *x_chk_calloc (ST_UINT num, ST_UINT size, SD_CONST ST_CHAR *SD_CONST file, SD_CONST ST_INT line); ST_CHAR *x_chk_strdup (ST_CHAR *str, SD_CONST ST_CHAR *SD_CONST file, SD_CONST ST_INT line); ST_VOID x_chk_free (ST_VOID *old, SD_CONST ST_CHAR *SD_CONST file, SD_CONST ST_INT line); #else /* !DEBUG_SISCO */ #define M_MALLOC(ctx,x) nd_chk_malloc (x) #define M_CALLOC(ctx,x,y) nd_chk_calloc (x,y) #define M_REALLOC(ctx,x,y) nd_chk_realloc (x,y) #define M_STRDUP(ctx,x) nd_chk_strdup (x) #define M_FREE(ctx,x) nd_chk_free (x) #define chk_malloc(x) nd_chk_malloc (x) #define chk_calloc(x,y) nd_chk_calloc (x,y) #define chk_realloc(x,y) nd_chk_realloc (x,y) #define chk_strdup(x) nd_chk_strdup (x) #define chk_free(x) nd_chk_free (x) ST_VOID *nd_chk_malloc (ST_UINT size); ST_VOID *nd_chk_calloc (ST_UINT num, ST_UINT size); ST_VOID *nd_chk_realloc (ST_VOID *old, ST_UINT size); ST_CHAR *nd_chk_strdup (ST_CHAR *str); ST_VOID nd_chk_free (ST_VOID *ptr); #endif /* !DEBUG_SISCO */#endif /* !SMEM_ENABLE *//************************************************************************//* chk_debug_en bit assignments *//* These are the defines to be used by all new applications */#define MEM_LOG_ERR 0x0001 #define MEM_LOG_CALLOC 0x0002 #define MEM_LOG_MALLOC 0x0004 #define MEM_LOG_REALLOC 0x0008 #define MEM_LOG_FREE 0x0010 extern ST_UINT chk_debug_en;/************************************************************************//* Replacement Memory allocation functions. *//************************************************************************/ST_VOID init_mem_chk (ST_VOID);ST_VOID dyn_mem_ptr_status (ST_VOID);ST_VOID dyn_mem_ptr_statistics (ST_BOOLEAN log_to_screen);ST_VOID check_mem_list (ST_VOID);ST_RET chk_alloc_ptr (ST_VOID *ptr);/************************************************************************//* fatal error service function pointers, used for unrecoverable errors *//************************************************************************/#define MEM_ERR_EXIT_CODE 2001extern ST_VOID *(*m_memerr_fun)(ST_UINT size); /* for malloc */extern ST_VOID *(*c_memerr_fun)(ST_UINT num, ST_UINT size); /* for calloc */extern ST_VOID *(*r_memerr_fun)(ST_VOID *old, ST_UINT size); /* for realloc*//************************************************************************//* statistics *//************************************************************************/extern ST_UINT32 chk_curr_mem_count;extern ST_UINT32 chk_max_dyn_mem_ptrs;extern ST_UINT32 chk_max_mem_allocated;extern ST_UINT32 chk_curr_mem_size;/************************************************************************//************************************************************************//* HEAP checking functions and macros *//* These defines are used to control the level or print in chk_hp */#define DEBUG_HEAP_SUM 0x0001#define DEBUG_HEAP_ENTRY 0x0002#define DEBUG_HEAP_ALL 0x0003#ifdef HEAP_CHECK_ENABLE#define HEAP_CHECK() chk_hp (0, (ST_CHAR *) __FILE__, __LINE__)#else#define HEAP_CHECK() #endifST_RET msoft_heap_check (ST_INT16);ST_RET chk_hp (ST_INT16 prt_mask,ST_CHAR *file,ST_INT line);/************************************************************************/extern ST_VOID *m_bad_ptr_val;/* This variable used to enable MSOFT heap check calls on every alloc *//* and free call. Also sets the unused heap memory to 0x55's */extern ST_BOOLEAN m_heap_check_enable;/* This variable used to enable list validation and overwrite checking *//* on every alloc and free call. */extern ST_BOOLEAN m_check_list_enable;/* Set this = SD_FALSE to speed up the debug version. When SD_TRUE, it *//* enables searching the memory list for the element before accessing *//* the memory during chk_realloc and chk_free calls */extern ST_BOOLEAN m_find_node_enable;/* This variable will cause chk_realloc to not realloc when the new *//* size is smaller than the old size */extern ST_BOOLEAN m_no_realloc_smaller;/* Dump memory table whenever high water mark is advanced */extern ST_BOOLEAN m_auto_hw_log;extern ST_CHAR *m_pad_string;extern ST_INT m_num_pad_bytes;extern ST_BOOLEAN m_fill_en;extern ST_UCHAR m_fill_byte;extern ST_BOOLEAN m_mem_debug;/* This function pointer can be set to select a function to be called *//* in case of memory error. */extern ST_VOID (*mem_chk_err)(ST_VOID);/* Read only */extern ST_UINT m_mem_overhead; /************************************************************************//************************************************************************/#ifdef __cplusplus}#endif#ifdef __cplusplus/************************************************************************//* deal with new and delete *//************************************************************************/#if defined (DEBUG_SISCO) && defined (DEBUG_NEW_SISCO) #include <new>void * operator new(size_t nSize) throw (std::bad_alloc);void * operator new(size_t nSize, const char *fileName, const int lineNum) throw (std::bad_alloc);void * operator new(size_t nSize, const std::nothrow_t&) throw ();void * operator new[](size_t nSize) throw (std::bad_alloc);void * operator new[](size_t nSize, const char *fileName, const int lineNum) throw (std::bad_alloc);void * operator new[](size_t nSize, const std::nothrow_t&) throw ();void operator delete(void *p) throw ();void operator delete(void *p, const char *fileName, const int lineNum) throw ();void operator delete[](void *p) throw ();void operator delete[](void *p, const char *fileName, const int lineNum) throw ();#ifndef MEM_CHK#define new new(thisFileName, __LINE__)#endif#endif#endif#endif /* mem_chk.h already included */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -