【发布时间】:2017-03-16 17:40:59
【问题描述】:
我正在将许多对象合并到一个包含渲染数据(网格)的向量中。这个向量在每一帧上都会被清除和重新填充(嗯,几乎)。
问题是在我的情况下,清除然后再次保留向量大小会对性能产生巨大影响,因为clear() 也可能会改变容量。
换句话说,我需要控制向量的容量何时发生变化。我想保留旧容量相当长的一段时间,直到我自己决定是时候改变它了。
我看到两个选项:
- 弄清楚如何控制
std::vector的容量何时发生变化 - 为大型内存对象实现一个内存池,它将获取
更新
此外,如果调用了 resize(10),后来又调用了 resize(5)(只是为了说明,将实际数字乘以几百万)怎么办?
稍后对resize(5) 的调用是否会导致向量重新分配?
【问题讨论】:
-
为什么你认为
.resize(0)会改变容量? std::vector::resize[...]Vector capacity is never reduced when resizing to smaller size because that would invalidate all iterators, rather than only the ones that would be invalidated by the equivalent sequence of pop_back() calls.[...]std::vector::clear也一样 -
vector
resize或clear绝不允许减少容量。这样做的唯一方法是swap或shrink_to_fit。 -
@NathanOliver From
std::vector::clear: "保持vector的容量()不变(注意:标准对容量变化的限制在vector::reserve的规范中,见[1])" Note 1 -
@Benjist 下次使用 cppreference。
-
@benjist cplusplus.com 是一个糟糕的网站,有很多错误