To Anonymní uživatel :
No tak jo, zkusil jsem jednoduchý test.
Následující kód je označen jak Out-Loop.
#include <cstdio>
int main()
{
int a = 0;
int b;
int c;
int d;
int e;
while(a < 1000000000)
{
b = a + 1;
c = b * a;
d = c + b - a;
e = a - d + c;
if(e == 42)
{
printf("%i\n", e);
}
++a;
}
}
Následující kód je označen jak In-Loop.
#include <cstdio>
int main()
{
int a = 0;
while(a < 1000000000)
{
int b = a + 1;
int c = b * a;
int d = c + b - a;
int e = a - d + c;
if(e == 42)
{
printf("%i\n", e);
}
++a;
}
}
Měřil jsem přes příkaz time, brána hodnota user (čas, který program strávil během v userspace, udáváno v sekundách), překládáno pomocí gcc 4.45 x86_64-gnu-linux bez optimalizací (-O0) a s optimalizacemi (-O3). Zde jsou výsledky.
Out-Loop -O0
8.41, 8.33, 8.40, 8.26, 8.38
In-Loop -O0
8.31, 7.96, 8.05, 8.40, 8.33
Out-Loop -O3
0.84, 0.84, 0.86, 0.85, 0.85
In-Loop -O3
0.83, 0.85, 0.86, 0.87, 0.84
Bez optimalizací je paradoxně o fous rychlejší In-Loop varianta. S optimalizacemi je úplně jedno, až na to, že vykonávání je o řád rychlejší oproti variantě bez optimalizací.