vector的内存分配行为

2014-11-24 02:02:57 · 作者: · 浏览: 1


/* 结论:
vector的存在可以使开发者不必关心内存的申请和释放。但是,vector背后的内存分配是按照2的倍数分配内存的。当当前容量对插入元素不够时,分配一块新的内存,这块内存的容量是原vector容量的2倍大小,然后复制旧内存,释放旧内存,可能多次涉及拷贝构造函数和析构函数,而这也正是vector的劣势所在。*/


在使用cocos2d-x引擎的时候,多次调用cclayer、ccsprite的析构函数,程序会崩掉。


#include
#include
using namespace std;

int main()
{
vector iVec;
cout << "size: " << iVec.size() << endl;
cout << "capacity " << iVec.capacity() << endl << endl; //1个元素, 容器容量为1

iVec.push_back(1);
cout << "size: " << iVec.size() << endl;
cout << "capacity " << iVec.capacity() << endl << endl; //2个元素, 容器容量为2

iVec.push_back(2);
cout << "size: " << iVec.size() << endl;
cout << "capacity " << iVec.capacity() << endl << endl; //3个元素, 容器容量为4

iVec.push_back(3);
cout << "size: " << iVec.size() << endl;
cout << "capacity " << iVec.capacity() << endl << endl; //4个元素, 容器容量为4

iVec.push_back(4);
iVec.push_back(5);
cout << "size: " << iVec.size() << endl;
cout << "capacity " << iVec.capacity() << endl << endl; //5个元素, 容器容量为8

iVec.push_back(6);
cout << "size: " << iVec.size() << endl;
cout << "capacity " << iVec.capacity() << endl << endl; //6个元素, 容器容量为8

iVec.push_back(7);
cout << "size: " << iVec.size() << endl;
cout << "capacity " << iVec.capacity() << endl << endl; //7个元素, 容器容量为8

iVec.push_back(8);
cout << "size: " << iVec.size() << endl;
cout << "capacity " << iVec.capacity() << endl << endl; //8个元素, 容器容量为8

iVec.push_back(9);
cout << "size: " << iVec.size() << endl;
cout << "capacity " << iVec.capacity() << endl << endl; //9个元素, 容器容量为16
/* 结论:
vector的存在可以使开发者不必关心内存的申请和释放。但是,vector背后的内存分配是按照2的倍数分配内存的。当当前容量对插入元素不够时,分配一块新的内存,这块内存的容量是原vector容量的2倍大小,然后复制旧内存,释放旧内存,可能多次涉及拷贝构造函数和析构函数,而这也正是vector的劣势所在。*/

return 0;
}