vector的capacity增长规律探讨
来源:互联网 发布:如何利用网络销售水果 编辑:程序博客网 时间:2024/05/12 18:11
目录
1. 前言
2. windows
2.1 代码实现
2.2 结果
2.3 分析
3. linux
3.1 代码实现
3.2 结果
3.3 分析
4. 总结
1. 前言
STL容器的内存分配是一个重点内容,不同版本的STL的内存分配策略不尽相同,下面我从2个测试例子来说明常用的2个版本的STL中vector内存分配的规律。
2. windows环境
说明:编译器是visual studio pro 2015
2.1 代码实现
//测试capacity的增长规律void test_capacity_and_size_increase(void){ float now = clock(); struct MyStruct { int i; string s; }; vector<int> arr_0, arr_7(7); vector<MyStruct> v; ofstream wf_int_0("vector_int_0.txt"); ofstream wf_int_7("vector_int_7.txt"); ofstream wf_struct("vector_struct.txt"); try { for(int i = 0; i < 10000; ++i) { MyStruct ms = { i,"0" }; v.push_back(ms); arr_0.push_back(i); arr_7.push_back(i); wf_int_0 << "capacity=" << arr_0.capacity() << ",size=" << arr_0.size() << endl; wf_int_7 << "capacity=" << arr_7.capacity() << ",size=" << arr_7.size() << endl; wf_struct << "capacity=" << v.capacity() << ",size=" << v.size() << endl; } } catch(const std::exception&) { wf_int_0.close(); wf_int_7.close(); wf_struct.close(); exit(1); } wf_int_0.close(); wf_int_7.close(); wf_struct.close(); now = clock() - now; cout << "总用时:" << now << endl;}
结果
截图1如下
截图2如下
去处重复数据后的部分截图如下
2.3 分析
从以上的截图的数据可以看出,当capacity<=1时,新分配的内存大小为1;当capacity>1时,则新增加的内存为原容量的50%(如果不为整数,则直接舍弃小数)。
3. linux环境
说明:在ubuntu 14.04LTS下,使用g++编译器
代码实现
#include <iostream>#include <vector>#include <iterator>#include <fstream>#include <ctime>#include <string>using namespace std;ofstream fout;int main(void){ float now = clock(); vector<int> arr_0, arr_7(7); ofstream wf_int_0("vector_int_0.txt"); ofstream wf_int_7("vector_int_7.txt"); try { for(int i = 0; i < 10000; ++i) { arr_0.push_back(i); arr_7.push_back(i); wf_int_0 << "capacity=" << arr_0.capacity() << ",size=" << arr_0.size() << endl; wf_int_7 << "capacity=" << arr_7.capacity() << ",size=" << arr_7.size() << endl; } } catch(const std::exception&) { wf_int_0.close(); wf_int_7.close(); exit(1); } wf_int_0.close(); wf_int_7.close(); now = clock() - now; cout << "总用时:" << now << endl; return 0;}
结果
截图1如下
截图2如下
3.3结果分析
从以上的截图的数据可以看出,当capacity=0时,新分配的内存大小为1;当capacity>=1时,则新增加的内存为原容量的2倍。
4. 总结
不同版本的STL的内存分配策略是不一样的,其中侯捷的《STL源码剖析》一书中,讲解的就是sgi 版本的STL,sgi 版本的STL多在linux中实现,而windows的编译器实现的STL又是另一版本。这个区别需要牢牢记住。
0 0
- vector的capacity增长规律探讨
- vector的capacity增长方式
- vector的capacity增长方式
- C++vector容器大小增长规律的总结
- C++9.4 vector容器的自增长(size、capacity、reserve)
- vector的capacity和size
- vector.capacity()
- vector::capacity
- vector的增长机理
- vector的增长机制
- vector的增长机制
- Vector的size和capacity的区别
- vector的size、capacity和max_size
- Vector的使用:resize、size、reserve、capacity
- vector 中 size()和 capacity()的区别
- Vector 中size和 capacity的区别
- vector中的capacity、size的区别
- vector的增长机制(zz)
- 根据公式计算结果(二)
- 磁盘图标如何从注册表删除
- 获取当前使用的浏览器的名字以及版本号
- Android数据保存之文件保存
- “堡仕杰”智能互动电视解决方案
- vector的capacity增长规律探讨
- CNNdroid:在Android上利用GPU加速执行CNN(卷积神经网络)
- Harris角点检测原理详解
- ie9+及其他兼容placeholder
- 深度学习-CAFFE利用CIFAR10网络模型训练自己的图像数据获得模型-4应用生成模型进行预测
- LeetCode:338. Counting Bits
- MMU与CACHE详解
- java相关问题总结
- Vue.js的组件(一)全局组件和局部组件