【STL源码阅读】 vector 内存增长策略
原创
©著作权归作者所有:来自51CTO博客作者DUT_LYH的原创作品,请联系作者获取转载授权,否则将追究法律责任
vector是变长的数组,每次使用的时候
如果超过现在的容量(capacity)大小
会自动重新分配内存
那么每次都会增长多少呢
有人说是增长原来大小的一半
为了一探究竟,可以直接打开stl的源码看一下
#include <iostream>
#include <vector>
using namespace std;
#define debug(x) cout<<#x<<": "<<(x)<<endl;
int main() {
vector<int> a;
debug(a.capacity())
for (int i = 0; i < 1000; ++i) {
a.push_back(i);
cout << i << ", " << a.capacity() << endl;
}
return 0;
}
在不指定大小的情况下,cap大小是0
随着push_back的进行,cap好像确实是按照原来大小一半在增长
这里使用的是vs2019 sdk版本
push back调用了emplace_back
emplace_back 在cap不够用的时候 调用重新分配内存
而我们要找的增长策略就是这个_Calculate_growth
确实是增长了一半,啊 没用的知识有增加了!