C ++:空向量交换和shrink_to_fit()不释放向量的内存

时间:2015-05-13 23:17:47

标签: c++ memory-management vector

我的代码是这样的。有问题的向量是来自boost库的dynamic bitset向量:

while(someCondition){
      vector<dynamic_bitset<> > myvector;  
      //some code here
      myvector.push_back(dynamic_bitset<> x) ;
      //some more code

      //myvector use is over now, release it.
      myvector.clear();
      myvector.shrink_to_fit();
      //or swap myvector with empty vector
}  

如上所述,myvector创建并在while循环的每次迭代中清除。我通过在GDB中运行此代码来分析此代码的内存使用情况,并且并行地查看top命令显示的内存消耗。 (有理由我不能使用valgrind)。

我可以看到,当push_back新元素进入myvector时,此程序的内存使用百分比会在top命令输出中上升。但是,当我清除矢量并将其缩小时(或者即使我将其与空矢量交换),top下的使用百分比也不会降低。因此,在循环的每次迭代中,内存使用量不断增加并最终耗尽大部分RAM。

如何防止这种情况发生?我想在while循环的每次迭代中将向量的内存释放回OS。也许,top不是分析记忆的正确方法,但我没有别的选择。有什么想法吗?

0 个答案:

没有答案