概述
目录
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又是另一版本。这个区别需要牢牢记住。
最后
以上就是雪白皮卡丘为你收集整理的vector的capacity增长规律探讨的全部内容,希望文章能够帮你解决vector的capacity增长规律探讨所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复