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



本文转自郝峰波博客园博客,原文链接:http://www.cnblogs.com/fengbohello/p/4270723.html,如需转载请自行联系原作者


相关文章
|
8天前
|
存储 C++ 容器
C++STL(标准模板库)处理学习应用案例
使用C++ STL,通过`std:vector`存储整数数组 `{5, 3, 1, 4, 2}`,然后利用`std::sort`进行排序,输出排序后序列:`std:vector&lt;int&gt; numbers; numbers = {5, 3, 1, 4, 2}; std:sort(numbers.begin(), numbers.end()); for (int number : numbers) { std::cout &lt;&lt; number &lt;&lt; &quot; &quot;; }`
15 2
|
19天前
|
存储 C++ 容器
【C++】vector的底层剖析以及模拟实现
【C++】vector的底层剖析以及模拟实现
|
9天前
|
存储 算法 C语言
【C++初阶】8. STL初阶 + String类
【C++初阶】8. STL初阶 + String类
45 1
|
9天前
|
存储 编译器 C++
【C++初阶】10. vector的使用及模拟实现
【C++初阶】10. vector的使用及模拟实现
48 1
|
12天前
|
存储 缓存 监控
深入解析linux内存指标:快速定位系统内存问题的有效技巧与实用方法(free、top、ps、vmstat、cachestat、cachetop、sar、swap、动态内存、cgroops、oom)
深入解析linux内存指标:快速定位系统内存问题的有效技巧与实用方法(free、top、ps、vmstat、cachestat、cachetop、sar、swap、动态内存、cgroops、oom)
|
19天前
|
算法 C++ 容器
【C++练级之路】【Lv.10】【STL】priority_queue类和反向迭代器的模拟实现
【C++练级之路】【Lv.10】【STL】priority_queue类和反向迭代器的模拟实现
|
19天前
|
C++ 容器
【C++练级之路】【Lv.9】【STL】stack类和queue类的模拟实现
【C++练级之路】【Lv.9】【STL】stack类和queue类的模拟实现
|
19天前
|
安全 程序员 C++
【C++ 基本知识】现代C++内存管理:探究std::make_系列函数的力量
【C++ 基本知识】现代C++内存管理:探究std::make_系列函数的力量
96 0
|
19天前
|
存储 算法 数据管理
C++中利用随机策略优化二叉树操作效率的实现方法
C++中利用随机策略优化二叉树操作效率的实现方法
73 1
|
20天前
|
存储 算法 数据库
【C/C++ 数据结构 】树的 四种表示方法
【C/C++ 数据结构 】树的 四种表示方法
26 0