for ループ内に print ステートメントを配置すると、パフォーマンスがいくらか犠牲になります。
メッセージが表示されるたびに、プログラムはシステム コールを実行して出力を画面に書き込む必要があるため、プログラム自体の CPU 時間が奪われます。
これら 2 つのループのパフォーマンスの違いを確認できます。
int i;
printf("Start Loop A\n");
for(i = 0; i < 100000; i++) {
printf("%d ", i);
}
printf("Done with Loop A\n");
printf("Start Loop B\n");
for(i = 0; i < 100000; i++) {
// Do Nothing
}
printf("Done with Loop B\n");
タイミングコードを含めますが、私は仕事の途中であり、後で昼食時に更新できます.
違いが目立たない場合は、100000 をより大きな数に増やすことができます (ただし、数が大きすぎると、最初のループが完了するまでに時間がかかりすぎます)。
おっと、私の答えを終えるのを忘れていました。
プログラムが必要とするシステム コールの数を減らすには、最初に条件をチェックし、その条件が true の場合にのみ出力します。
たとえば、私のコード例のように数え上げていた場合、以下を使用して 100 番目ごとの数値のみを出力できます%
。
int i;
for(i = 0; i < 100000; i++) {
if(i%100 == 0)
printf("%d", i);
}
これにより、syscall の数が ~100000 から ~1000 に減少し、ループのパフォーマンスが向上します。