请问stl vector使用时内存不断上涨? 有内存泄露
请教stl vector使用时内存不断上涨? 有内存泄露?
反复执行func,内存会不断缓慢上涨,每次大概会增加10-100个字节
------解决方案--------------------
//我用capacity函数帮你测试了一下。如果你调用了clear函数,就不会出现重新申请更大内存的情况···
void func();
{
vector<A> av;
A a1;
for (int i = 0; i < 60000; i++)
for (int j = 0; j < 3; j++)
{
a1.clear();
al.push_back(1); //类中没有push_back函数
a1.push_back(2);
}
av.clear();
}
------解决方案--------------------
因为clear不会释放内存
对象析构时才会
释放内存可以:
vector<A> tmp;
tmp.swap(al);
tmp析构则内存释放
------解决方案--------------------
你退出程序就好了,退出程序会调用析构的
不过这不算泄漏, 只是STL管理内存的方式
------解决方案--------------------
人家用了这么久的东西就被你轻易的否定了。
------解决方案--------------------
------解决方案--------------------
STL vector有他自己的内存管理方式。另外,你如果测试debug和release同样也会发现内存的变化不一致哦。呵呵。
反复执行func,内存会不断缓慢上涨,每次大概会增加10-100个字节
- C/C++ code
class A { vector<int> v1; int num; A() { num = 0; } ~A() { clear(); } clear() { v1.clear(); num = 0; } void add(int x) { v1.push_back(x); num++ } } void func(); { vector<A> av; A a1; for (int i = 0; i < 60000; i++) for (int j = 0; j < 3; j++) { a1.clear(); al.push_back(1); a1.push_back(2); } av.clear(); }
------解决方案--------------------
//我用capacity函数帮你测试了一下。如果你调用了clear函数,就不会出现重新申请更大内存的情况···
void func();
{
vector<A> av;
A a1;
for (int i = 0; i < 60000; i++)
for (int j = 0; j < 3; j++)
{
a1.clear();
al.push_back(1); //类中没有push_back函数
a1.push_back(2);
}
av.clear();
}
------解决方案--------------------
因为clear不会释放内存
对象析构时才会
释放内存可以:
vector<A> tmp;
tmp.swap(al);
tmp析构则内存释放
------解决方案--------------------
你退出程序就好了,退出程序会调用析构的
不过这不算泄漏, 只是STL管理内存的方式
------解决方案--------------------
人家用了这么久的东西就被你轻易的否定了。
------解决方案--------------------
------解决方案--------------------
STL vector有他自己的内存管理方式。另外,你如果测试debug和release同样也会发现内存的变化不一致哦。呵呵。