C++ C++;:空向量交换和收缩到拟合()don';t释放向量的内存

C++ C++;:空向量交换和收缩到拟合()don';t释放向量的内存,c++,memory-management,vector,C++,Memory Management,Vector,我的代码是这样的。所讨论的向量是boost库中的动态位集向量: while(someCondition){ vector<dynamic_bitset<> > myvector; //some code here myvector.push_back(dynamic_bitset<> x) ; //some more code //myvector use is over now, releas

我的代码是这样的。所讨论的向量是boost库中的
动态位集
向量:

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
}  
while(某些条件){
向量myvector;
//这里有一些代码
myvector.push_back(动态_位集x);
//还有代码吗
//myvector的使用已经结束,请释放它。
myvector.clear();
myvector.shrink_to_fit();
//或者用空向量交换myvector
}  
如上所述,
myvector
在while循环的每次迭代中都被创建和清除。我通过在GDB中运行该代码来分析该代码的内存使用情况,同时查看
top
命令显示的内存消耗。(有一些原因我不能使用valgrind)

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


如何防止这种情况发生?我希望向量的内存在
while
循环的每次迭代中都被释放回操作系统。也许,
top
不是分析内存的正确方法,但我没有其他选择。有什么想法吗?

大多数标准库从操作系统分配大块内存,然后将它们分成小块,以满足程序的分配请求。大多数情况下,只有当程序退出时,或者(可能)当您调用一些特殊的内部函数告诉它们释放内存(如果可以的话)(例如,Microsoft编译器的
\u heapmin()
)时,才会将这些大块释放回操作系统.@SleuthEye自定义数据类型是Boost中的动态位集。请注意,根据:
shorn_to_fit
“…是一个非绑定请求,用于将容量()减小为大小()。如果满足请求,则取决于实现”。另请参见
new
delete
(这是
std::vector
最有可能在内部使用的)通常是通过调用
malloc
free
来实现的。如果有足够的内存,gcc会释放回操作系统。看起来应该让您将阈值调整得足够低,以便在需要时至少尝试将额外内存释放回操作系统(但请注意,在大多数代码/情况下,处理这个问题可能不是一个好主意)。