00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _MEMTRACK_H_
00012 #define _MEMTRACK_H_
00013
00014 #ifdef CH_USE_MEMORY_TRACKING
00015
00016 #include <iostream>
00017 using std::ostream;
00018
00019 #include "REAL.H"
00020
00021
00022
00023
00024
00025
00026 #include "Arena.H"
00027
00028
00029
00030 #define callocMT(a_a,a_b) callocp (a_a, a_b, __FILE__, __LINE__)
00031 #define reallocMT(a_a, a_b) reallocp(a_a, a_b, __FILE__, __LINE__)
00032 #define mallocMT(a_a) mallocp (a_a, __FILE__, __LINE__)
00033 #define freeMT(a_a) freep (a_a)
00034
00035 #include "BaseNamespaceHeader.H"
00036
00037 extern unsigned long long int ch_memcount;
00038
00039 void dumpmemorymap(int a_sig);
00040
00041
00042 void dumpmemoryatexit();
00043
00044
00045 void dumpmemoryabort();
00046
00047
00048 int registerMemorySignals();
00049
00050
00051 void ReportUnfreedMemory(ostream& a_os);
00052
00053
00054 void ReportAllocatedMemory(ostream& a_os);
00055
00056
00057 void ReportMemoryUsage(ostream& a_os);
00058
00059
00060 void UnfreedMemory();
00061
00062
00063 void MemoryUsage();
00064
00065
00066 void memTrackingOn();
00067
00068
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
00079
00080
00081
00082
00083
00084 class Memtrack
00085 {
00086 public:
00087
00088
00089
00090
00091
00092
00093
00094
00095 static void ReportUnfreedMemory(ostream& a_os);
00096
00097
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 static std::vector<void (*)()> s_memtrackAtExit;
00107 };
00108
00109
00110
00111 void AddTrack(void* a_addr,
00112 size_t a_asize,
00113 const char* a_fname,
00114 int a_lnum,
00115 bool a_malloc);
00116
00117 void RemoveTrack(void* a_addr,
00118 bool a_malloc);
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135 void* mallocp(size_t a_size,
00136 const char* a_file,
00137 int a_line);
00138
00139 void* reallocp(void* a_p,
00140 size_t a_size,
00141 const char* a_file,
00142 int a_line);
00143
00144 void* callocp(size_t a_nelem,
00145 size_t a_elsize,
00146 const char* a_file,
00147 int a_line);
00148
00149 void freep(void* a_p);
00150
00151 #include "BaseNamespaceFooter.H"
00152
00153 #else // on CH_USE_MEMORY_TRACKING
00154
00155
00156 #include <cstdlib>
00157 #define callocMT(a_a,a_b) calloc (a_a, a_b)
00158 #define reallocMT(a_a, a_b) realloc(a_a, a_b)
00159 #define mallocMT(a_a) malloc (a_a)
00160 #define freeMT(a_a) free (a_a)
00161
00162 inline void AddTrack(void* a_addr,
00163 size_t a_asize,
00164 const char* a_fname,
00165 int a_lnum,
00166 bool a_malloc)
00167 {
00168
00169 }
00170
00171 inline void RemoveTrack(void* a_addr,
00172 bool a_malloc)
00173 {
00174
00175 }
00176
00177 #endif // ifdef CH_USE_MEMORY_TRACKING
00178
00179 #endif // include guard