on linux, std::deque not release memory until program exits. complete code below. appreciated!
#include <deque> #include <vector> #include <string> #include <iostream> #include <boost/shared_ptr.hpp> #include <queue> #include <list> #include <cstdio> #include <cstdlib> typedef boost::shared_ptr<std::vector<int> > vecptr; typedef std::deque< vecptr > queuetype; char buf[1024]; char line[1024]; int main() { { int v=0; queuetype deq; for(int i=0; i<30;++i) for(int j=0; j<1000;++j) for(int k=0;k<1000;++k) { vecptr p( new std::vector<int>); deq.push_back(p); } std::cout<<"done increasing deq:deq size="<<deq.size()<<std::endl; sleep(20); std::cout<<"start decreasing deq size"<<std::endl; while(deq.size()>0) { deq.pop_front(); } std::cout<<"done decreasing deq size,deq size="<<deq.size()<<std::endl; } std::cin.getline(line,sizeof(line)); return 0; }
that correct, pop_front()
not deallocate storage allocated push_back()
if want deallocate before program ends, can end lifetime of object. if want deallocate before lifetime of object ends, consider using "shrink-to-fit" idiom c++ container classes.
queuetype().swap (deq); // c++98 deq.shrink_to_fit(); // c++11
Comments
Post a Comment