99template <class ... Args>
1010void BM_Capture (benchmark::State &state, Args &&...args) {
1111 auto args_tuple = std::make_tuple (std::move (args)...);
12- (void )args_tuple;
1312 for (auto _ : state) {
13+ benchmark::DoNotOptimize (args_tuple);
14+ benchmark::ClobberMemory ();
1415 }
1516}
1617BENCHMARK_CAPTURE (BM_Capture, int_string_test, 42 , std::string(" abc" ));
@@ -21,6 +22,8 @@ static void BM_rand_vector(benchmark::State &state) {
2122 std::vector<int > v;
2223 for (auto _ : state) {
2324 std::string empty_string;
25+ benchmark::DoNotOptimize (empty_string);
26+ benchmark::ClobberMemory ();
2427 }
2528}
2629// Register the function as a benchmark
@@ -31,6 +34,8 @@ static void BM_StringCopy(benchmark::State &state) {
3134 std::string x = " hello" ;
3235 for (auto _ : state) {
3336 std::string copy (x);
37+ benchmark::DoNotOptimize (copy);
38+ benchmark::ClobberMemory ();
3439 }
3540}
3641// Register the function as a benchmark
@@ -40,7 +45,11 @@ static void BM_memcpy(benchmark::State &state) {
4045 char *src = new char [state.range (0 )];
4146 char *dst = new char [state.range (0 )];
4247 memset (src, ' x' , state.range (0 ));
43- for (auto _ : state) memcpy (dst, src, state.range (0 ));
48+ for (auto _ : state) {
49+ memcpy (dst, src, state.range (0 ));
50+ benchmark::DoNotOptimize (dst);
51+ benchmark::ClobberMemory ();
52+ }
4453 delete[] src;
4554 delete[] dst;
4655}
0 commit comments