gpt4 book ai didi

c++ - std::vector::reserve 性能损失

转载 作者:可可西里 更新时间:2023-11-01 18:40:10 29 4
gpt4 key购买 nike

inline void add(const DataStruct& rhs) {
using namespace boost::assign;
vec.reserve(vec.size() + 3);
vec += rhs.a, rhs.b, rhs.c;
}

上面的函数被执行了大约 17000 次,并且它执行了(据我所知。涉及到一些转换)大约 2 个数量级差 对 vector::reserve 的调用。

我一直觉得 reserve 可以加快 push_back 即使对于小值,但这似乎不是真的,我找不到任何明显的理由说明它不应该这样。 reserve 是否会阻止函数的内联?对 size() 的调用是否太昂贵?这取决于平台吗?我将尝试编写一些小型基准以在干净的环境中确认这一点。

编译器:gcc (GCC) 4.4.2 with -g -O2

最佳答案

reserve() 的 GCC 实现将分配精确数量的元素,而 push_back() 会将内部缓冲区加倍以指数方式增长,因此您正在阻止指数增长并在每次迭代时强制重新分配/复制。在 ltracevalgrind 下运行测试并查看 malloc() 调用的次数。

关于c++ - std::vector::reserve 性能损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1742859/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com