00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef MEMTRACK_H
00029 #define MEMTRACK_H
00030
00031 #ifdef ENABLE_MEMORY_TRACKING
00032
00033 #include <iostream>
00034 using std::ostream;
00035
00036
00038 void ReportUnfreedMemory(ostream& os);
00040 void ReportMemoryUsage(ostream& os);
00041
00043 void UnfreedMemory();
00044
00046 void MemoryUsage();
00047
00049 void memTrackingOn();
00050
00052 void memtrackingOff();
00053
00054 void overallMemoryUsage(long long& currentTotal, long long& peak);
00055
00057
00061 class Memtrack
00062 {
00063 public:
00064
00066
00074 static void ReportUnfreedMemory(ostream& os)
00075 {::ReportUnfreedMemory(os);}
00076
00078 static void UnfreedMemory()
00079 {::UnfreedMemory();}
00080
00081 static void memTrackingOn()
00082 {:: memTrackingOn();}
00083
00084 static void memtrackingOff()
00085 {::memtrackingOff();}
00086
00087 static void overallMemoryUsage(long long& currentTotal, long long& peak)
00088 {::overallMemoryUsage(currentTotal, peak);}
00089 };
00090
00091
00092
00093
00094 void AddTrack(void* addr, size_t asize, const char *fname,
00095 int lnum, bool malloc);
00096 void RemoveTrack(void* addr, bool malloc);
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110 void* mallocp(size_t size, const char* file, int line);
00111 void* reallocp(void* p, size_t size, const char* file, int line);
00112 void* callocp(size_t nelem, size_t elsize, const char* file, int line);
00113 void freep(void* p);
00114
00115 #define calloc(a,b) callocp(a,b,__FILE__, __LINE__)
00116 #define realloc(a, b) reallocp(a, b, __FILE__, __LINE__)
00117 #define malloc(a) mallocp(a, __FILE__, __LINE__)
00118 #define free(a) freep(a)
00119
00120 #endif
00121
00122 #endif
00123