我的代码是这样的。有问题的向量是来自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
不是分析记忆的正确方法,但我没有别的选择。有什么想法吗?