Имеется 2 цикла: for (i = 0; i < a + 1; i++) { } и b = a + 1; for (i = 0; i < b; i++) { } Вычисляет ли процессор по новой при каждом прохождении цикла значение a + 1? То есть, по другому говоря, с точки зрения экономии ресурсов код №2 лучше №1?
Ответ
Вот результат gcc-4.6.1 на x86-64:
#include
int main() {
int a = 10;
for (int i = 0; i < a + 1; i++) {
printf("iteration: %d
", i);
}
}
Собираем gcc -O2 -g -Wall -std=c99 -o test test.c
В gdb видим вот такое:
0x400440
int foo() {
printf("called foo
");
return 10;
}
int main() {
for (int i = 0; i < foo() + 1; i++) {
printf("iteration: %d
", i);
}
}
Там уже call на каждую итерацию.
Premature optimization is the root of all evil —Donald Knuth
Комментариев нет:
Отправить комментарий