最近我看到了关于在std::list
和std::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();
但我的结果并没有重现预期的效果:
有人知道我需要改进什么才能得到想要的结果吗?
1条答案
按热度按时间bvjxkvbb1#
设置O3(
add_compile_options(-O3)
)解决了该问题。