00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012 #ifndef _MEMTRACK_H_
00013 #define _MEMTRACK_H_
00014
00015 #ifdef CH_USE_MEMORY_TRACKING
00016
00017 #include <iostream>
00018 using std::ostream;
00019
00020 #include "REAL.H"
00021
00022
00023
00024
00025
00026
00027 #include "Arena.H"
00028
00029
00030
00031 #define callocMT(a_a,a_b) callocp (a_a, a_b, __FILE__, __LINE__)
00032 #define reallocMT(a_a, a_b) reallocp(a_a, a_b, __FILE__, __LINE__)
00033 #define mallocMT(a_a) mallocp (a_a, __FILE__, __LINE__)
00034 #define freeMT(a_a) freep (a_a)
00035
00036 #include "BaseNamespaceHeader.H"
00037
00039 void dumpmemorymap(int a_sig);
00040
00042 void dumpmemoryatexit();
00043
00045 void dumpmemoryabort();
00046
00048 int registerMemorySignals();
00049
00051 void ReportUnfreedMemory(ostream& a_os);
00052
00054 void ReportAllocatedMemory(ostream& a_os);
00055
00057 void ReportMemoryUsage(ostream& a_os);
00058
00060 void UnfreedMemory();
00061
00063 void MemoryUsage();
00064
00066 void memTrackingOn();
00067
00069 void memtrackingOff();
00070
00071 void overallMemoryUsage(long long& a_currentTotal,
00072 long long& a_peak);
00073
00074 void overallMemoryUsage();
00075
00076 void memtrackStamp(Real& a_current,
00077 Real& a_peak);
00078
00080
00084 class Memtrack
00085 {
00086 public:
00088
00095 static void ReportUnfreedMemory(ostream& a_os);
00096
00098 static void UnfreedMemory();
00099
00100 static void memTrackingOn();
00101
00102 static void memtrackingOff();
00103
00104 static void overallMemoryUsage(long long& a_currentTotal,
00105 long long& a_peak);
00106 };
00107
00108
00109
00110 void AddTrack(void* a_addr,
00111 size_t a_asize,
00112 const char* a_fname,
00113 int a_lnum,
00114 bool a_malloc);
00115
00116 void RemoveTrack(void* a_addr,
00117 bool a_malloc);
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134 void* mallocp(size_t a_size,
00135 const char* a_file,
00136 int a_line);
00137
00138 void* reallocp(void* a_p,
00139 size_t a_size,
00140 const char* a_file,
00141 int a_line);
00142
00143 void* callocp(size_t a_nelem,
00144 size_t a_elsize,
00145 const char* a_file,
00146 int a_line);
00147
00148 void freep(void* a_p);
00149
00150 #include "BaseNamespaceFooter.H"
00151
00152 #else // on CH_USE_MEMORY_TRACKING
00153
00154
00155 #include <malloc.h>
00156 #define callocMT(a_a,a_b) calloc (a_a, a_b)
00157 #define reallocMT(a_a, a_b) realloc(a_a, a_b)
00158 #define mallocMT(a_a) malloc (a_a)
00159 #define freeMT(a_a) free (a_a)
00160
00161 void dumpmemoryatexit();
00162
00163 #endif // ifdef CH_USE_MEMORY_TRACKING
00164
00165 #endif // include guard