При попытке узнать, как долго выполнялась строка кода C, я заметил эту странную вещь:
int main (char argc, char * argv[]) {
time_t begin, end;
uint64_t i;
double total_time, free_time;
int A = 1;
int B = 1;
begin = clock();
for (i = 0; i<(1<<31)-1; i++);
end = clock();
free_time = (double)(end-begin)/CLOCKS_PER_SEC;
printf("%f\n", free_time);
begin = clock();
for (i = 0; i<(1<<31)-1; i++) {
A += B%2;
}
end = clock();
free_time = (double)(end-begin)/CLOCKS_PER_SEC;
printf("%f\n", free_time);
return(0);
}
Что при выполнении показов:
5.873425
4.826874
Почему пустая петля использует больше времени, чем вторая, в которой есть команда? Конечно, я пробовал много вариантов, но каждый раз, пустой цикл занимает больше времени, чем один с одной инструкцией внутри.
Обратите внимание, что я попытался упорядочить порядок циклов и добавить код разминки, и он не изменил мою проблему вообще.
Я использую кодовые блоки как IDE с GNU gcc-компилятором, linux ubuntu 14.04 и имею Quadcore intel i5 на 2.3 ГГц (я пытался запустить программу на одном ядре, это не меняет результат).