Я перефразирую этот вопрос на основе полученных комментариев.Почему программа C работает медленнее, когда цикл содержит условие
У меня есть цикл, который работает 30 миллиардов раз и присваивает значения блоку памяти, назначенному с помощью malloc();
Когда цикл содержит условие, он работает намного медленнее, чем когда условие отсутствует. Обзор сценариев ниже:
Сценарий: Условие присутствует и программу медленно (43 сек)
Сценария B: Состояние нет и программы намного быстрее (4 сек)
// gcc -O3 -c block.c && gcc -o block block.o
#include <stdio.h>
#include <stdlib.h>
#define LEN 3000000000
int main (int argc, char** argv){
long i,j;
unsigned char *n = NULL;
unsigned char *m = NULL;
m = (unsigned char *) malloc (sizeof(char) * LEN);
n = m;
srand ((unsigned) time(NULL));
int t = (unsigned) time(NULL);
for (j = 0; j < 10; j++){
n = m;
for (i = 0; i < LEN; i++){
//////////// A: THIS IS SLOW
/*
if (i % 2){
*n = 1;
} else {
*n = 0;
}
*/
/////////// END OF A
/////////// B: THIS IS FAST
*n = 0;
i % 2;
*n = 1;
/////////// END OF B
n += 1;
}
}
printf("Done. %d sec \n", ((unsigned) time(NULL)) - t);
free(m);
return 0;
}
С уважением, KD
Без какого-либо контекста мы можем только догадываться. Предполагается, что 0 используется как символ окончания для некоторой строки, но, как сказано, нам нужен какой-то контекст. – Gerhardh
Отделение ясновидения находится в декретном отпуске. Все вопросы о неработающем коде должны сопровождаться [mcve]. Руководство желает извиниться за любые неудобства. –
Опубликуйте минимальный упрощенный код, который мы можем запускать и компилировать. И если вы правы, я предсказываю большое голосование. –