在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个或者更多。
所以会出现上面惊人的差距!