V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
csfreshman
V2EX  ›  程序员

请教大家关于 google benchmark 的一个问题

  •  
  •   csfreshman · Aug 14, 2021 · 1902 views
    This topic created in 1718 days ago, the information mentioned may be changed or developed.

    晚上在虚拟机上安装了 google benchmark 运行了一个网上的例子,运行 ok,自己写了一个始终显示都是 0ns 耗时,请求各位大佬分析,哪里有问题?

    #include <benchmark/benchmark.h>
    #include <vector>
    
    int loop = 100000;
    static void bench_vector_reserve(benchmark::State& state)
    {
        std::vector<int> ans;
        ans.reserve(loop);
        for(int i = 0;i < loop;i++)
            ans.push_back(i);
    }
    BENCHMARK(bench_vector_reserve);
    
    static void bench_vector(benchmark::State& state)
    {
        std::vector<int> ans;
        for(int i = 0;i < loop;i++)
            ans.push_back(i);
    }
    BENCHMARK(bench_vector);
    
    BENCHMARK_MAIN();
    
    

    最近学习 C++了解到 vector 会动态扩容,比如每次空间 double,我上面的例子不管 loop 调多大,运行结果都显示:

    [root workspace]#./a.out
    2021-08-13T12:00:19-04:00
    Running ./a.out
    Run on (4 X 1900 MHz CPU s)
    CPU Caches:
      L1 Data 32 KiB (x2)
      L1 Instruction 32 KiB (x2)
      L2 Unified 256 KiB (x2)
      L3 Unified 3072 KiB (x1)
    Load Average: 0.02, 0.03, 0.00
    ---------------------------------------------------------------
    Benchmark                     Time             CPU   Iterations
    ---------------------------------------------------------------
    bench_vector_reserve      0.000 ns        0.000 ns            0
    bench_vector              0.000 ns        0.000 ns            0
    [root workspace]#
    

    有没有帮忙老哥分析一波?

    4 replies    2021-08-15 16:29:15 +08:00
    csfreshman
        1
    csfreshman  
    OP
       Aug 14, 2021
    求各位大佬分析一波,我顶不住了先休息了😝
    BiteTheDust
        2
    BiteTheDust  
       Aug 14, 2021
    你没看官网文档示例吗,得把你测试的内容放在循环体里。
    ```
    static void BM_StringCreation(benchmark::State& state) {
    for (auto _ : state)
    std::string empty_string;
    }
    ```
    ```
    static void bench_vector_reserve(benchmark::State& state)
    {
    for (auto _ : state)
    {
    std::vector<int> ans;
    ans.reserve(loop);
    for(int i = 0;i < loop;i++)
    ans.push_back(i);
    }
    }
    ```
    c0xt30a
        3
    c0xt30a  
       Aug 14, 2021
    看起来是被优化掉了
    csfreshman
        4
    csfreshman  
    OP
       Aug 15, 2021
    @BiteTheDust 多谢,看了源代码的例子,按照你说的这种写法确实能跑起来,感谢老铁
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5592 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 07:26 · PVG 15:26 · LAX 00:26 · JFK 03:26
    ♥ Do have faith in what you're doing.