0

次の Google ベンチマークがあります。

    void SharedPtrUsingNew(benchmark::State & state)
    {
        while (state.KeepRunning())
        {
            benchmark::DoNotOptimize(make_shared<MediumSizeData>());
        }
    }
    void LocalSharedPtrUsingNew(benchmark::State & state)
    {
        while (state.KeepRunning())
        {
            benchmark::DoNotOptimize(make_local_shared<MediumSizeData>());
        }
    }

また、バリエーション:

     void SharedPtrUsingNew(benchmark::State & state)
    {
        while (state.KeepRunning())
        {
            benchmark::DoNotOptimize(shared_ptr<MediumSizeData>(new MediumSizeData));
        }
    }
    void LocalSharedPtrUsingNew(benchmark::State & state)
    {
        while (state.KeepRunning())
        {
            benchmark::DoNotOptimize(local_shared_ptr<MediumSizeData>(new MediumSizeData));
        }
    }

結果は次のとおりです。

Run on (40 X 2195 MHz CPU s)
CPU Caches:
  L1 Data 32K (x20)
  L1 Instruction 32K (x20)
  L2 Unified 1048K (x20)
  L3 Unified 14417K (x2)
----------------------------------------------------------------------------
Benchmark                                  Time             CPU   Iterations
----------------------------------------------------------------------------
SharedPtrUsingNew                        125 ns          126 ns      5600000
LocalSharedPtrUsingNew                   154 ns          157 ns      4480000

2nd variation:
SharedPtrUsingNew                        183 ns          181 ns      3200000
LocalSharedPtrUsingNew                   243 ns          246 ns      2986667

これは、boost 1.72 および Visual C++ 2019 16.5.4 で発生します。

local_shared_ptr を使用する利点は、メモリ バリアが使用されないことであることは理解していますが、構築にはよりコストがかかると予想していました。

4

0 に答える 0