我有一个名为OGLSHAPE的类的std :: vector.
每个形状都有一个SHAPECONTOUR结构的向量,它有一个float向量和一个double向量的向量.它还有一个大纲结构的向量,其中包含一个float向量.
最初,我的程序使用8.7 MB的ram启动.我注意到,当我开始填充这些时,加上双打和浮子,记忆得到很快,然后稳定下来.当我清除OGLSHAPE向量时,仍然使用大约19MB.然后,如果我推出大约150多个形状,然后清除那些,我现在使用大约19.3MB的内存.从逻辑上讲,如果它第一次从8.7变为19,那么下一次它会达到30左右.我不确定它是什么.我以为是内存泄漏,但现在我不确定.我所做的只是将数字推入std :: vectors,没有别的.所以我希望能回忆起我的全部记忆.什么可能导致这个?
谢谢
*编辑,好吧它的内存碎片分配了很多小东西,怎么能解决?
调用std :: vector <> :: clear()不一定释放所有已分配的内存(它取决于std :: vector <>的实现).这通常是为了优化目的而进行的,以避免不必要的内存分配.
为了真正释放实例所拥有的内存,只需:
template <typename T>
inline void really_free_all_memory(std::vector<T>& to_clear)
{
std::vector<T> v;
v.swap(to_clear);
}
// ...
std::vector<foo> objs;
// ...
// really free instance 'objs'
really_free_all_memory(objs);
Run Code Online (Sandbox Code Playgroud)
它会创建一个新的(空)实例,并将其与您想要清除的矢量实例交换.
| 归档时间: |
|
| 查看次数: |
792 次 |
| 最近记录: |