fork download
  1. #include <iostream>
  2. #include <cstring>
  3. #include <mutex>
  4.  
  5. class MemTracker
  6. {
  7. private:
  8. static char func_name[100];
  9. static size_t current_size;
  10. static std::mutex mem_lock;
  11.  
  12. public:
  13. MemTracker(const char* FuncName) {strcpy(&func_name[0], FuncName);}
  14. static void inc(size_t amount) {current_size += amount;}
  15. static void print() {std::cout<<func_name<<" allocated: "<<current_size<<" bytes.\n";}
  16. static void reset() {current_size = 0; memset(&func_name[0], 0, sizeof(func_name)/sizeof(char));}
  17. };
  18.  
  19. char MemTracker::func_name[100] = {0};
  20. size_t MemTracker::current_size = 0;
  21. std::mutex MemTracker::mem_lock;
  22.  
  23.  
  24. void* operator new(size_t size)
  25. {
  26. MemTracker::inc(size);
  27. return malloc(size);
  28. }
  29.  
  30. void operator delete(void* ptr)
  31. {
  32. free(ptr);
  33. }
  34.  
  35.  
  36. void FuncOne()
  37. {
  38. MemTracker(__func__);
  39.  
  40. int* i = new int[100];
  41. delete[] i;
  42. i = new int[200];
  43. delete[] i;
  44.  
  45. MemTracker::print();
  46. MemTracker::reset();
  47. }
  48.  
  49. void FuncTwo()
  50. {
  51. MemTracker(__func__);
  52. char* c = new char[1024];
  53. delete[] c;
  54. c = new char[2048];
  55. delete[] c;
  56.  
  57. MemTracker::print();
  58. MemTracker::reset();
  59. }
  60.  
  61. int main()
  62. {
  63. FuncOne();
  64. FuncTwo();
  65. FuncTwo();
  66. FuncTwo();
  67. return 0;
  68. }
Success #stdin #stdout 0s 3428KB
stdin
Standard input is empty
stdout
FuncOne allocated: 1200 bytes.
FuncTwo allocated: 3072 bytes.
FuncTwo allocated: 3072 bytes.
FuncTwo allocated: 3072 bytes.