![](/img/trans.png)
[英]Can't measure memory allocation caused by std::vector<>::reserve under Windows
[英]Can std::vector capacity/size/reserve be used to manually manage vector memory allocation?
我正在运行时间非常敏感的代码,因此需要一个方案来在代码的特定位置为我的向量保留更多空间,在这里我可以(大约)知道要添加多少个元素,而不是由std替我做当向量已满时。
我还没有找到一种测试方法来确保没有我不知道的std极端情况,因此我想知道向量的容量如何影响内存的重新分配。 更具体地说,下面的代码是否可以确保永远不会发生自动重新分配?
码
std::vector<unsigned int> data;
while (condition) {
// Reallocate here
// get_elements_required() gives an estimate that is guaranteed to be >= the actual nmber of elements.
unsigned int estimated_elements_required = get_elements_required(...);
if ((data.capacity() - data.size()) <= estimated_elements_required) {
data.reserve(min(data.capacity() * 2, data.max_length - 1));
}
...
// NEVER reallocate here, I would rather see the program crash actually...
for (unsigned int i = 0; i < get_elements_to_add(data); ++i) {
data.push_back(elements[i]);
}
}
estimated_elements_required
在上面的代码是保证是等于或大于估计值,将要添加的元素的实际数量。 实际添加元素的代码根据向量本身的容量执行操作,中途更改容量将产生错误的结果。
是的,这将起作用。
从reserve
的定义:
可以保证在调用
reserve()
直到插入使向量的大小大于capacity()
的值之前,在插入期间不会发生重新分配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.