fork download
  1. #include <unistd.h> // for getpid()
  2.  
  3. #include <memory>
  4. #include <fstream>
  5. #include <sstream>
  6. #include <iostream>
  7.  
  8. class MemUsage {
  9. public:
  10. unsigned size, resident, share, text, lib, data, dirty;
  11.  
  12. MemUsage() {
  13. std::auto_ptr<std::istream> is(file_statm());
  14. *is >> size >> resident >> share >> text >> lib >> data >> dirty;
  15. }
  16.  
  17. private:
  18. static std::istream* file_statm() {
  19. std::ostringstream os("/proc/");
  20. os << getpid() << "/statm";
  21. return new std::ifstream(os.str().c_str());
  22. }
  23. };
  24.  
  25. std::ostream& operator<< (std::ostream &os, const MemUsage &mu) {
  26. return os << "size: " << mu.size << ", RSS: " << mu.resident
  27. << ", share: " << mu.share << ", text: " << mu.text
  28. << ", lib: " << mu.lib << ", data: " << mu.data
  29. << ", dt: " << mu.dirty;
  30. }
  31.  
  32. #include <vector>
  33. #include <iostream>
  34. #include <unistd.h>
  35.  
  36. int main()
  37. {
  38. std::cout << MemUsage() << std::endl;
  39. std::vector<int> x;
  40. x.reserve(1024);
  41. sleep(1);
  42. std::cout << MemUsage() << std::endl;
  43. }
Success #stdin #stdout 0s 3480KB
stdin
Standard input is empty
stdout
size: 3212849700, RSS: 3212849708, share: 3076204261, text: 3079200976, lib: 0, data: 134520139, dt: 3077746676
size: 3212849700, RSS: 3212849708, share: 3076204261, text: 3079200976, lib: 0, data: 134520139, dt: 3077746676