std::vector<T> vec; // line #1
vec.reserve(100); // line #2
我想知道第1行是否会触发一个小分配(例如,内存为10 Ts),或者第一次分配是否发生在第2行。标准是否对此有所说明?
答案 0 :(得分:7)
它是实现定义的。 vector
的默认构造函数不需要分配任何内容,但允许实现执行此操作。
答案 1 :(得分:2)
标准没有说明,但你可以自己找出它在你的系统中的含义:
vector<int> v;
cout << v.capacity() << endl;
v.reserve(100);
cout << v.capacity() << endl;
这在VS2008上给了我0
和100
- 即初始向量没有分配。
编辑:删除了错误的建议 EDIT2:实验很少,因为我好奇......
vector<int> w;
for (int i=0; i<100000; i++)
{
if (i == w.capacity())
cout << i << ", ";
w.push_back(i);
}
输出:
0, 1, 2, 3, 4, 6, 9, 13, 19, 28, 42, 63, 94, 141, 211, 316, 474, 711, 1066,
1599, 2398, 3597, 5395, 8092, 12138, 18207, 27310, 40965, 61447, 92170,
答案 2 :(得分:0)
第一个通常不会触发分配,除了堆栈上的向量容器的空间(其中将包括有关已分配了多少空间以及使用了多少空间的信息,这两者都为零)。但是,在您保留之前,堆分配不会发生。通常...