// memsize_t.cxx #include "dataset_util/memsize.h" #include "dataset_util/MemoryUsage.h" #include #include #include using std::string; using std::cout; using std::endl; using std::ostringstream; using std::vector; using std::set; using std::multiset; using std::map; void msg(string txt) { cout << "--- "; cout << txt; cout << " ---" << endl; } // Compare expected and actual memory usage. void check(size_t exp, size_t act) { cout << "Expected: " << exp << endl; cout << " Actual: " << act << endl; assert( exp > 0 ); assert( double(act)/double(exp) > 0.90 ); assert( double(act)/double(exp) < 1.10 ); } class MyClass { int ival; MyClass* p1; MyClass* p2; MyClass* p3; MyClass* p4; MyClass* p5; public: MyClass(int i =0) : ival(i) { } bool operator<(const MyClass& rhs) const { return ival < rhs.ival; } }; int memsize_t() { msg("string"); const int nval = 100000; string mystring = "abcdefghijklmnopqrstuvwxyz"; char copy[100]; char copy2[100]; size_t mem1 = MemoryUsage().total(); string strs[nval]; for ( int ival=0; ival myvec(100); mem1 = MemoryUsage().total(); const int nvec = 10000; vector vecs[nvec]; size_t exp = 0; for ( int ivec=0; ivec myset; for ( int ival=0; ival<100; ++ival ) { myset.insert(ival); } mem1 = MemoryUsage().total(); const int nset = 2000; set sets[nset]; exp = 0; for ( int iset=0; iset mymset; for ( int ival=0; ival<100; ++ival ) { mymset.insert(ival); } mem1 = MemoryUsage().total(); multiset msets[nset]; exp = 0; for ( int iset=0; iset mymap; for ( int ival=0; ival<100; ++ival ) { mymap[ival] = 2*ival; } mem1 = MemoryUsage().total(); const int nmap = 2000; map maps[nmap]; exp = 0; for ( int imap=0; imap"); const int nsvecstr = 100; vector mysvec(nsvecstr); mem1 = MemoryUsage().total(); const int nsvec = 1000; vector svecs[nsvec]; exp = 0; for ( int ivec=0; ivec"); const int nsmapstr = 100; mem1 = MemoryUsage().total(); const int nsmap = 1000; map smaps[nsvec]; exp = 0; for ( int imap=0; imap