STL中vector什么时候会自动分配内存,又是怎么分配的呢?
环境:Linux CentOS 5.2
1、代码
#include <vector> #include <stdio.h> using namespace std; int main() { vector<int> x_vec; printf("data size : [%3d], mem size : [%3d]\n", x_vec.size(), x_vec.capacity()); for(int i = 0; i < 260; i++) { x_vec.push_back(i); printf("data size : [%3d], mem size : [%3d]\n", x_vec.size(), x_vec.capacity()); } return 0; }
2、运行结果
data size : [ 0], mem size : [ 0] data size : [ 1], mem size : [ 1] data size : [ 2], mem size : [ 2] data size : [ 3], mem size : [ 4] data size : [ 4], mem size : [ 4] data size : [ 5], mem size : [ 8] ...... data size : [ 8], mem size : [ 8] data size : [ 9], mem size : [ 16] data size : [ 10], mem size : [ 16] ...... data size : [ 15], mem size : [ 16] data size : [ 16], mem size : [ 16] data size : [ 17], mem size : [ 32] data size : [ 18], mem size : [ 32] ...... data size : [ 31], mem size : [ 32] data size : [ 32], mem size : [ 32] data size : [ 33], mem size : [ 64] data size : [ 34], mem size : [ 64] ...... data size : [ 63], mem size : [ 64] data size : [ 64], mem size : [ 64] data size : [ 65], mem size : [128] data size : [ 66], mem size : [128] ...... data size : [127], mem size : [128] data size : [128], mem size : [128] data size : [129], mem size : [256] data size : [130], mem size : [256] ...... data size : [255], mem size : [256] data size : [256], mem size : [256] data size : [257], mem size : [512] data size : [258], mem size : [512] data size : [259], mem size : [512] data size : [260], mem size : [512]
结论:每次分配的内存用尽时,vector以指数方式再次分配内存
本文转自郝峰波博客园博客,原文链接:http://www.cnblogs.com/fengbohello/p/4270723.html,如需转载请自行联系原作者