1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include <memory> 10 11 #include "benchmark/benchmark.h" 12 13 static void BM_SharedPtrCreateDestroy(benchmark::State& st) { 14 while (st.KeepRunning()) { 15 auto sp = std::make_shared<int>(42); 16 benchmark::DoNotOptimize(sp.get()); 17 } 18 } 19 BENCHMARK(BM_SharedPtrCreateDestroy); 20 21 static void BM_SharedPtrIncDecRef(benchmark::State& st) { 22 auto sp = std::make_shared<int>(42); 23 benchmark::DoNotOptimize(sp.get()); 24 while (st.KeepRunning()) { 25 std::shared_ptr<int> sp2(sp); 26 benchmark::ClobberMemory(); 27 } 28 } 29 BENCHMARK(BM_SharedPtrIncDecRef); 30 31 static void BM_WeakPtrIncDecRef(benchmark::State& st) { 32 auto sp = std::make_shared<int>(42); 33 benchmark::DoNotOptimize(sp.get()); 34 while (st.KeepRunning()) { 35 std::weak_ptr<int> wp(sp); 36 benchmark::ClobberMemory(); 37 } 38 } 39 BENCHMARK(BM_WeakPtrIncDecRef); 40 41 BENCHMARK_MAIN(); 42