【问题标题】:What is std::vector::_emplace_back_slow_path / std::vector::_push_back_slow_path?什么是 std::vector::_emplace_back_slow_path / std::vector::_push_back_slow_path?
【发布时间】:2018-07-21 15:08:39
【问题描述】:

在使用调用分析器时,我注意到std::vector::_emplace_back_slow_path 中的运行时成本和分配数量很大。因为我关心性能,所以我想说“快速路径”。我做错了什么?

【问题讨论】:

  • 尽量避免内存重新分配。如果可能,请使用reserve() 设置容量(如果您可以合理地预期向量将增长到的大小的合理上限),而不是简单地添加元素。当然,作为一般规则,您还应该避免在性能关键代码中过多地调整向量的大小。

标签: c++ stdvector libc++


【解决方案1】:

Looking at the implementation,“慢路径”是需要重新分配时采用的路径:

vector<_Tp, _Allocator>::emplace_back(_Args&&... __args)
{
    if (this->__end_ < this->__end_cap())
    {
        // This is the code that you could call the "fast path"
    }
    else
        __emplace_back_slow_path(_VSTD::forward<_Args>(__args)...);
}

这也适用于std::vector::_push_back_slow_path

【讨论】:

  • 如果您事先知道向量需要多大,可以尝试致电std::vector::reserve
猜你喜欢
  • 2012-03-07
  • 1970-01-01
  • 2020-02-01
  • 1970-01-01
  • 2021-06-02
  • 2020-01-26
  • 2020-09-22
相关资源
最近更新 更多