STL的内存碎片(内存空洞)验证
2018-03-31 本文已影响40人
金琥
C++的STL库在使用过程中要留意内存碎片,可以用以下方式简单验证
#include <iostream>
#include <vector>
#include <new>
using namespace std;
struct t_test
{
int a;
vector<string> *p;
};
int main()
{
struct t_test test;
int tmp;
test.p = new vector<string>;
cin >> tmp;//程序暂停的观察点,用top查看进程占用内存很少,几乎可以认为为0
for(int i=0;i<1000000;i++) {
test.p->push_back("abcdefghijk");
}
cin >> tmp;//再观察,内存占用54M
test.p->clear();
cin >> tmp;//54M
delete test.p;
cin >> tmp;//49M,内存并未完全释放回系统,大部分形成了内存碎片
return 0;
}