1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include <iostream> #include <vector> #include <string> #include <memory> using namespace std; #define noexcept template<typename TrackType> size_t* mem_used() {static size_t s = 0; return &s;} template<class T, class TrackType, class BaseAllocator = std::allocator<T>> class TrackerAllocator : public BaseAllocator { public: typedef BaseAllocator base; TrackerAllocator() noexcept : BaseAllocator() {} TrackerAllocator(const TrackerAllocator& b) noexcept : BaseAllocator(b) {} TrackerAllocator(TrackerAllocator&& b) noexcept : BaseAllocator(b) {} template <class U, class TT> TrackerAllocator(const TrackerAllocator<U, TT>& b) noexcept : BaseAllocator(b) {} ~TrackerAllocator() {} typename base::pointer allocate(typename BaseAllocator::size_type n) { BaseAllocator::allocate(n); mem_used<TrackType>() += n; } typename base::pointer allocate(typename BaseAllocator::size_type n, typename base::pointer h=0) { BaseAllocator::allocate(n, h); mem_used<TrackType>() += n; } void deallocate(typename BaseAllocator::pointer p, typename BaseAllocator::size_type n) { BaseAllocator::deallocate(n); mem_used<TrackType>() -= n; } }; typedef std::basic_string<char, std::char_traits<char>, TrackerAllocator<char, string> > trackstring; typedef std::vector<int, TrackerAllocator<int, vector<int>> > trackvector; int main() { trackstring mystring("HELLO WORLD"); trackvector myvec(mystring.begin(), mystring.end()); std::cout << *mem_used<string>() << '\n'; //display memory usage of all strings std::cout << *mem_used<vector<int>>() << '\n'; //display memory usage of all vector<int> // ^ ^ // This identifies which memory type from above to look up. } |
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bWVtb3J5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBub2V4Y2VwdAoKdGVtcGxhdGU8dHlwZW5hbWUgVHJhY2tUeXBlPiAKc2l6ZV90KiBtZW1fdXNlZCgpIHtzdGF0aWMgc2l6ZV90IHMgPSAwOyByZXR1cm4gJnM7fQoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVHJhY2tUeXBlLCBjbGFzcyBCYXNlQWxsb2NhdG9yID0gc3RkOjphbGxvY2F0b3I8VD4+IApjbGFzcyBUcmFja2VyQWxsb2NhdG9yIDogcHVibGljIEJhc2VBbGxvY2F0b3IgewpwdWJsaWM6CiAgICB0eXBlZGVmIEJhc2VBbGxvY2F0b3IgYmFzZTsKICAgIFRyYWNrZXJBbGxvY2F0b3IoKSBub2V4Y2VwdCA6IEJhc2VBbGxvY2F0b3IoKSB7fQogICAgVHJhY2tlckFsbG9jYXRvcihjb25zdCBUcmFja2VyQWxsb2NhdG9yJiBiKSBub2V4Y2VwdCA6IEJhc2VBbGxvY2F0b3IoYikge30KICAgIFRyYWNrZXJBbGxvY2F0b3IoVHJhY2tlckFsbG9jYXRvciYmIGIpIG5vZXhjZXB0IDogQmFzZUFsbG9jYXRvcihiKSB7fQogICAgdGVtcGxhdGUgPGNsYXNzIFUsIGNsYXNzIFRUPiAKICAgIFRyYWNrZXJBbGxvY2F0b3IoY29uc3QgVHJhY2tlckFsbG9jYXRvcjxVLCBUVD4mIGIpIG5vZXhjZXB0IDogQmFzZUFsbG9jYXRvcihiKSB7fQogICAgflRyYWNrZXJBbGxvY2F0b3IoKSB7fQoKCiAgICB0eXBlbmFtZSBiYXNlOjpwb2ludGVyIGFsbG9jYXRlKHR5cGVuYW1lIEJhc2VBbGxvY2F0b3I6OnNpemVfdHlwZSBuKSB7CiAgICAgICAgQmFzZUFsbG9jYXRvcjo6YWxsb2NhdGUobik7CiAgICAgICAgbWVtX3VzZWQ8VHJhY2tUeXBlPigpICs9IG47CiAgICB9CiAgICB0eXBlbmFtZSBiYXNlOjpwb2ludGVyIGFsbG9jYXRlKHR5cGVuYW1lIEJhc2VBbGxvY2F0b3I6OnNpemVfdHlwZSBuLCB0eXBlbmFtZSBiYXNlOjpwb2ludGVyIGg9MCkgewogICAgICAgIEJhc2VBbGxvY2F0b3I6OmFsbG9jYXRlKG4sIGgpOwogICAgICAgIG1lbV91c2VkPFRyYWNrVHlwZT4oKSArPSBuOwogICAgfQogICAgdm9pZCBkZWFsbG9jYXRlKHR5cGVuYW1lIEJhc2VBbGxvY2F0b3I6OnBvaW50ZXIgcCwgdHlwZW5hbWUgQmFzZUFsbG9jYXRvcjo6c2l6ZV90eXBlIG4pIHsKICAgICAgICBCYXNlQWxsb2NhdG9yOjpkZWFsbG9jYXRlKG4pOwogICAgICAgIG1lbV91c2VkPFRyYWNrVHlwZT4oKSAtPSBuOwogICAgfQp9OwoKdHlwZWRlZiBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LAogICAgICAgICAgICAgICAgICAgICAgICAgIFRyYWNrZXJBbGxvY2F0b3I8Y2hhciwgc3RyaW5nPiA+IHRyYWNrc3RyaW5nOwp0eXBlZGVmIHN0ZDo6dmVjdG9yPGludCwgCiAgICAgICAgICAgICAgICAgICAgVHJhY2tlckFsbG9jYXRvcjxpbnQsIHZlY3RvcjxpbnQ+PiA+IHRyYWNrdmVjdG9yOwoKaW50IG1haW4oKSB7CiAgICB0cmFja3N0cmluZyBteXN0cmluZygiSEVMTE8gV09STEQiKTsKICAgIHRyYWNrdmVjdG9yIG15dmVjKG15c3RyaW5nLmJlZ2luKCksIG15c3RyaW5nLmVuZCgpKTsKCiAgICBzdGQ6OmNvdXQgPDwgKm1lbV91c2VkPHN0cmluZz4oKSA8PCAnXG4nOyAvL2Rpc3BsYXkgbWVtb3J5IHVzYWdlIG9mIGFsbCBzdHJpbmdzCiAgICBzdGQ6OmNvdXQgPDwgKm1lbV91c2VkPHZlY3RvcjxpbnQ+PigpIDw8ICdcbic7IC8vZGlzcGxheSBtZW1vcnkgdXNhZ2Ugb2YgYWxsIHZlY3RvcjxpbnQ+CiAgICAvLyAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICBeCiAgICAvLyAgICAgICAgICAgICAgICAgICAgIFRoaXMgaWRlbnRpZmllcyB3aGljaCBtZW1vcnkgdHlwZSBmcm9tIGFib3ZlIHRvIGxvb2sgdXAuCn0=
-
upload with new input
-
result: Success time: 0s memory: 2964 kB returned value: 0
0 0


