Changes in / [58e822a:8dbedfc]
- File:
-
- 1 edited
-
src/Common/Heap.cc (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Common/Heap.cc
r58e822a r8dbedfc 21 21 #include <iostream> 22 22 23 #define WITH_HEAP_STATISTICS23 //#define WITH_HEAP_STATISTICS 24 24 25 25 namespace HeapStats { … … 30 30 #else 31 31 struct StatBlock { 32 const char * name = nullptr; ///< Name of this pass 33 size_t mallocs = 0; ///< Allocations in this pass 34 size_t frees = 0; ///< Frees in this pass 35 size_t n_allocs = 0; ///< Current number of live allocations 36 size_t peak_allocs = 0; ///< Peak number of live allocations this pass 32 const char * name = nullptr; 33 size_t mallocs = 0; 34 size_t frees = 0; 37 35 }; 38 36 39 StatBlock passes[100] = {{ "Pre-Parse", 0, 0 , 0, 0}};37 StatBlock passes[100] = {{ "Pre-Parse", 0, 0 }}; 40 38 const size_t passes_size = sizeof(passes) / sizeof(passes[0]); 41 39 size_t passes_cnt = 1; … … 45 43 passes[passes_cnt].mallocs = 0; 46 44 passes[passes_cnt].frees = 0; 47 passes[passes_cnt].n_allocs48 = passes[passes_cnt].peak_allocs49 = passes[passes_cnt-1].n_allocs;50 45 passes_cnt++; 51 46 … … 60 55 } 61 56 62 void print(const StatBlock& stat, size_t nc, size_t total_mallocs, size_t total_frees , size_t overall_peak) {57 void print(const StatBlock& stat, size_t nc, size_t total_mallocs, size_t total_frees) { 63 58 std::cerr << std::setw(nc) << stat.name; 64 59 std::cerr << " | "; 65 60 66 print(stat.mallocs, total_mallocs); 67 print(stat.frees, total_frees ); 68 print(stat.peak_allocs, overall_peak ); 61 print(stat.mallocs, total_mallocs); 62 print(stat.frees , total_frees ); 69 63 std::cerr << "\n"; 70 64 } … … 81 75 size_t total_mallocs = 0; 82 76 size_t total_frees = 0; 83 size_t overall_peak = 0;84 77 for(size_t i = 0; i < passes_cnt; i++) { 85 78 nc = std::max(nc, std::strlen(passes[i].name)); 86 79 total_mallocs += passes[i].mallocs; 87 80 total_frees += passes[i].frees; 88 overall_peak = std::max(overall_peak, passes[i].peak_allocs);89 81 } 90 size_t nct = nc + 65;82 size_t nct = nc + 44; 91 83 92 84 const char * const title = "Heap Usage Statistic"; … … 96 88 print('-', nct); 97 89 std::cerr << std::setw(nc) << "Pass"; 98 std::cerr << " | Malloc Count | Free Count | Peak Allocs |" << std::endl;90 std::cerr << " | Malloc Count | Free Count |" << std::endl; 99 91 100 92 print('-', nct); 101 93 for(size_t i = 0; i < passes_cnt; i++) { 102 print(passes[i], nc, total_mallocs, total_frees , overall_peak);94 print(passes[i], nc, total_mallocs, total_frees); 103 95 } 104 96 print('-', nct); 105 print({"Sum", total_mallocs, total_frees, 0, overall_peak}, 106 nc, total_mallocs, total_frees, overall_peak); 97 print({"Sum", total_mallocs, total_frees}, nc, total_mallocs, total_frees); 107 98 108 99 } … … 167 158 void * malloc( size_t size ) { 168 159 static auto __malloc = reinterpret_cast<void * (*)(size_t)>(interpose_symbol( "malloc", nullptr )); 169 if( passes_cnt > 0 ) { 170 passes[passes_cnt - 1].mallocs++; 171 passes[passes_cnt - 1].n_allocs++; 172 passes[passes_cnt - 1].peak_allocs 173 = std::max(passes[passes_cnt - 1].peak_allocs, passes[passes_cnt - 1].n_allocs); 174 } 160 if( passes_cnt > 0 ) passes[passes_cnt - 1].mallocs++; 175 161 return __malloc( size ); 176 162 } … … 178 164 void free( void * ptr ) { 179 165 static auto __free = reinterpret_cast<void (*)(void *)>(interpose_symbol( "free", nullptr )); 180 if( passes_cnt > 0 ) { 181 passes[passes_cnt - 1].frees++; 182 passes[passes_cnt - 1].n_allocs--; 183 } 166 if( passes_cnt > 0 ) passes[passes_cnt - 1].frees++; 184 167 return __free( ptr ); 185 168 } … … 187 170 void * calloc( size_t nelem, size_t size ) { 188 171 static auto __calloc = reinterpret_cast<void * (*)(size_t, size_t)>(interpose_symbol( "calloc", nullptr )); 189 if( passes_cnt > 0 ) { 190 passes[passes_cnt - 1].mallocs++; 191 passes[passes_cnt - 1].n_allocs++; 192 passes[passes_cnt - 1].peak_allocs 193 = std::max(passes[passes_cnt - 1].peak_allocs, passes[passes_cnt - 1].n_allocs); 194 } 172 if( passes_cnt > 0 ) passes[passes_cnt - 1].mallocs++; 195 173 return __calloc( nelem, size ); 196 174 }
Note:
See TracChangeset
for help on using the changeset viewer.