Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 16th, 2012  |  syntax: None  |  size: 1.34 KB  |  hits: 8  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. How to use operator new to count number of times of dynamic memory allocation
  2. int i;
  3. ...
  4. ostingstream os;
  5. os<<i;
  6. string s=os.str();
  7.        
  8. #include <new>
  9. #include <cstdlib>
  10. #include <iostream>
  11. #include <string>
  12. #include <vector>
  13. #include <sstream>
  14.  
  15. int number_of_allocs = 0;
  16.  
  17. void* operator new(std::size_t size) throw(std::bad_alloc) {
  18.   ++number_of_allocs;
  19.   void *p = malloc(size);
  20.   if(!p) throw std::bad_alloc();
  21.   return p;
  22. }
  23.  
  24. void* operator new  [](std::size_t size) throw(std::bad_alloc) {
  25.   ++number_of_allocs;
  26.   void *p = malloc(size);
  27.   if(!p) throw std::bad_alloc();
  28.   return p;
  29. }
  30.  
  31. void* operator new  [](std::size_t size, const std::nothrow_t&) throw() {
  32.   ++number_of_allocs;
  33.   return malloc(size);
  34. }
  35. void* operator new   (std::size_t size, const std::nothrow_t&) throw() {
  36.   ++number_of_allocs;
  37.   return malloc(size);
  38. }
  39.  
  40.  
  41. void operator delete(void* ptr) throw() { free(ptr); }
  42. void operator delete (void* ptr, const std::nothrow_t&) throw() { free(ptr); }
  43. void operator delete[](void* ptr) throw() { free(ptr); }
  44. void operator delete[](void* ptr, const std::nothrow_t&) throw() { free(ptr); }
  45.  
  46. int main () {
  47.   int start(number_of_allocs);
  48.  
  49.   // Your test code goes here:
  50.   int i(7);
  51.   std::ostringstream os;
  52.   os<<i;
  53.   std::string s=os.str();
  54.   // End of your test code
  55.  
  56.   int end(number_of_allocs);
  57.  
  58.   std::cout << "Number of Allocs: " << end-start << "n";
  59. }