Optymalizacja C++
Mnożenie

Jeżeli rozmiary wierszy macierzy są wielokrotnościami dwójki to obliczenia będą szybsze

const int rows = 10, columns = 8;
float matrix[rows][columns];
int i, j;
int order(int x);
...
for (i = 0; i < rows; i++) {
  j = order(i);
  matrix[j][0] = i;
}

Zapis

matrix[j][0]
jest zamieniany na
// ogólny przypadek
(int)&matrix[0][0] + j * (columns * sizeof(float))
 
// rozmiar wiersza jest wielokrotnością dwójki
(int)&matrix[0][0] + j << 5

Czasami sztuczne powiększenie struktury aby jej rozmiar był potęgą dwójki może przyspieszyć działanie programu

struct S1 {
 int a;
 int b;
 int c;
 int UnusedFiller; // "Sztuczne" wypełnienie
};
int order(int x);
const int size = 100;
S1 list[size]; int i, j;
...
for (i = 0; i < size; i++) {
  j = order(i); // przeglądamy w zadanej kolejności
  list[j].a = list[j].b + list[j].c;
}


Tomasz Kapela, Kraków 2011-2020