C++的STL中vector内存分配方法的简单探索

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以指数方式再次分配内存

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。