c++ 使用google benchmark重现向量插入的性能结果

t2a7ltrp  于 2022-12-20  发布在  Go
关注(0)|答案(1)|浏览(120)

最近我看到了关于在std::liststd::vector前面插入元素的以下结果:

  • 对于std::list,时间是线性的
  • 对于std::vector,时间多项式
    *对于少量元素(〈800)std::vector搏动列表

源代码:https://github.com/CppCon/CppCon2022/blob/main/Presentations/Refresher-on-Containers-Algorithms-and-Performance.pdf
我试着用google benchmark重现这些结果。

#include <benchmark/benchmark.h>

static void bm_vec(benchmark::State &state) {
    for (auto _ : state)
    {
        state.PauseTiming();
        std::vector<int> v ;
        benchmark::DoNotOptimize(v.data());
        state.ResumeTiming();
        for (int i = 0; i < state.range(0); i++)
        {
           v.insert(v.begin(), 1);
        }
        benchmark::ClobberMemory();
    }
}

BENCHMARK(bm_vec)->DenseRange(10,2000,10);

static void bm_list(benchmark::State &state) {
    
    for (auto _ : state)
    {
        state.PauseTiming();
        std::list<int> v ;
        benchmark::DoNotOptimize(v.front());
        state.ResumeTiming();
        for (int i = 0; i < state.range(0); i++)
        {
            v.insert(v.begin(), 1);
        }
        
    }
}
BENCHMARK(bm_list)->DenseRange(10,2000,10);

BENCHMARK_MAIN();

但我的结果并没有重现预期的效果:

有人知道我需要改进什么才能得到想要的结果吗?

bvjxkvbb

bvjxkvbb1#

设置O3(add_compile_options(-O3))解决了该问题。

相关问题