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;
}
上一篇下一篇

猜你喜欢

热点阅读