-3
受信したコメントに基づいてこの質問を言い換えています。ループに条件が含まれているときにCプログラムが遅くなる理由
私は300億回実行され、malloc()を使用して割り当てられたメモリのチャンクに値を割り当てます。
ループに条件が含まれている場合、条件が存在しない場合よりもはるかに遅く実行されます。
シナリオA:(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
私たちは推測できる文脈が一切ありません。 1つの推測では、0は文字列の終端文字として使用されますが、文脈が必要です。 – Gerhardh
透視部は産休中です。非作業コードに関するすべての質問には、[mcve]が付いている必要があります。経営陣は、生じた不便をお詫びしたい。 –
実行してコンパイルできる最小限の簡略化されたコードを投稿してください。そして、あなたが正しいとすれば、私は多くの投票を予測します。 –