----------------------------------------------------------------------------------------
Benchmark Time CPU Iterations UserCounters...
----------------------------------------------------------------------------------------
Sum1_bn/iterations:1000000000 3.30 ns 3.27 ns 1000000000 sum=5
Sum2_bn/iterations:1000000000 3.38 ns 3.38 ns 1000000000 sum=5
void Sum1_bn(benchmark::State& state) {
unsigned char a = 3, b = 2;
unsigned char sum;
for (auto _ : state) {
sum = a + b;
}
state.counters["sum"] = sum;
}
char precompute[256][256];
void Sum2_bn(benchmark::State& state) {
unsigned char a = 3, b = 2;
precompute[a][b] = a + b;
unsigned char sum;
for (auto _ : state) {
sum = precompute[a][b];
}
state.counters["sum"] = sum;
}
BENCHMARK(Sum1_bn)->Iterations(1000000000);
BENCHMARK(Sum2_bn)->Iterations(1000000000);
прирост будет пусть лишь после 20,50,100 цифр
список формируется однократно в начале, а прямая адресация к памяти быстрее, чем запрос через массив
Там 4 числа - это просто адресация на результат: просто, чтобы сам принцип работы был понятен. Разумеется, что это через прямую работу с памятью делается.
storage[[a,b,c,d]].val
или storage[a][b][c][d].val
(через многомерные массивы), то там будет то же самое а то имедленнее, что код на С++, что привел я - вычисление адреса или несколько индексаций.хранилище - это гиперкуб