现在的位置: 首页 > 综合 > 正文

C++内存优化–vector中的指针

2013年09月15日 ⁄ 综合 ⁄ 共 575字 ⁄ 字号 评论关闭

在vector中持有大量指针会造成大量的内存损失。

考虑下面的代码:

 

    int nSize = 1000000;
    //////////////////////////////////////////////////////////////////////////
    std::vector<int> v1;
    for (int i = 0; i < nSize; ++i)
    {
        v1.push_back(i);
    }
    //////////////////////////////////////////////////////////////////////////
    std::vector<int*> v2;
    for (int i = 0; i < nSize; ++i)
    {
        v2.push_back(new int(i));
    }

在release-win32-vs2005的环境下,

进入第一个for循环之前,进程内存占用为368k

第一个for循环结束之后,进程占用内存4.4M,

而第二个for循环结束之后,进程占用内存为39M。

 

同样为1000000个int值,为什么在内存中占用的空间不一样大呢,甚至相差好几倍?

这和C++的堆内存分配方式有关。

new一个int,系统并非仅仅分配4个byte的内存,可能要做内存取整扩展。

这样的话,你使用的内存就并非仅仅为32个bit了,可能为64个或者更多。

所以会出现上面惊人的差距!

 

 

抱歉!评论已关闭.