benchmark/test
Eric 0526755944 Add C++11 Ranged For loop alternative to KeepRunning (#454)
* Add C++11 Ranged For loop alternative to KeepRunning

As pointed out by @astrelni and @dominichamon, the KeepRunning
loop requires a bunch of memory loads and stores every iterations,
which affects the measurements.

The main reason for these additional loads and stores is that the
State object is passed in by reference, making its contents externally
visible memory, and the compiler doesn't know it hasn't been changed
by non-visible code.

It's also possible the large size of the State struct is hindering
optimizations.

This patch allows the `State` object to be iterated over using
a range-based for loop. Example:

void BM_Foo(benchmark::State& state) {
	for (auto _ : state) {
		[...]
	}
}

This formulation is much more efficient, because the variable counting
the loop index is stored in the iterator produced by `State::begin()`,
which itself is stored in function-local memory and therefore not accessible
by code outside of the function. Therefore the compiler knows the iterator
hasn't been changed every iteration.

This initial patch and idea was from Alex Strelnikov.

* Fix null pointer initialization in C++03
2017-10-10 08:56:42 -07:00
..
basic_test.cc Add C++11 Ranged For loop alternative to KeepRunning (#454) 2017-10-10 08:56:42 -07:00
benchmark_test.cc Fix #444 - Use BENCHMARK_HAS_CXX11 over __cplusplus. (#446) 2017-09-14 15:50:33 -06:00
CMakeLists.txt Add macros for create benchmark with templated fixture (#451) 2017-10-09 21:10:37 +02:00
complexity_test.cc Json reporter: don't cast floating-point to int; adjust tooling (#426) 2017-07-24 16:13:55 -07:00
cxx03_test.cc Add macros for create benchmark with templated fixture (#451) 2017-10-09 21:10:37 +02:00
diagnostics_test.cc Make Benchmark a single header library (but not header-only) (#407) 2017-07-04 16:31:47 -06:00
donotoptimize_test.cc Fix #342: DoNotOptimize causes compile errors on older GCC versions. (#398) 2017-06-02 15:47:23 -07:00
filter_test.cc Simplify clang-format and apply to tests (#302) 2016-10-07 11:04:50 -07:00
fixture_test.cc Simplify clang-format and apply to tests (#302) 2016-10-07 11:04:50 -07:00
map_test.cc Simplify clang-format and apply to tests (#302) 2016-10-07 11:04:50 -07:00
multiple_ranges_test.cc Simplify clang-format and apply to tests (#302) 2016-10-07 11:04:50 -07:00
options_test.cc Make Benchmark a single header library (but not header-only) (#407) 2017-07-04 16:31:47 -06:00
output_test_helper.cc Trying again to fix error caused by -Wunused-function. 2017-05-03 00:05:15 +01:00
output_test.h Improve some comments. 2017-05-01 23:02:35 +01:00
register_benchmark_test.cc Add ClearRegisteredBenchmark() function. (#402) 2017-06-14 09:16:53 -07:00
reporter_output_test.cc Drop Stat1, refactor statistics to be user-providable, add median. (#428) 2017-08-23 16:44:29 -07:00
skip_with_error_test.cc Simplify clang-format and apply to tests (#302) 2016-10-07 11:04:50 -07:00
templated_fixture_test.cc Add macros for create benchmark with templated fixture (#451) 2017-10-09 21:10:37 +02:00
user_counters_tabular_test.cc reporter_output_test: json: iterations is int, not float (#431) 2017-07-31 19:04:02 -06:00
user_counters_test.cc reporter_output_test: json: iterations is int, not float (#431) 2017-07-31 19:04:02 -06:00