私はC言語でtime.hライブラリを使って楽しんでいました。いくつかの基本的な関数のクロック ティック数を測定して、実際の速度を把握しようとしていました。私はclock() 関数を使用しました。この場合、printf()関数を測定していました。
私のプログラムを見てください:
#include <stdio.h>
#include <time.h>
void main()
{
const int LIMIT = 2000;
const int LOOP = 20;
int results[LOOP];
for(int i=0; i<LOOP; i++)
{
int j;
clock_t time01 = clock();
for(j=1; j<LIMIT; j++)
{
printf("a");
}
clock_t time02 = clock();
results[i] = (int) (time02 - time01);
}
for(int i=0; i<LOOP; i++)
{
printf("\nCLOCK TIME: %d.", results[i]);
}
getchar();
}
このプログラムは基本的に、printf("a") 関数と呼ばれる 2000 回のクロック ティック数の 20 回をカウントするだけです。
私が理解していない奇妙なことは結果です。ほとんどの場合、他のテストを行っている場合でも、ランダムに2 つのグループの結果が得られます。
CLOCK TIME: 31.
CLOCK TIME: 47.
CLOCK TIME: 47.
CLOCK TIME: 31.
CLOCK TIME: 47.
CLOCK TIME: 31.
CLOCK TIME: 47.
CLOCK TIME: 31.
CLOCK TIME: 47.
CLOCK TIME: 47.
CLOCK TIME: 31.
CLOCK TIME: 47.
CLOCK TIME: 31.
CLOCK TIME: 47.
CLOCK TIME: 47.
CLOCK TIME: 31.
CLOCK TIME: 47.
CLOCK TIME: 31.
CLOCK TIME: 47.
CLOCK TIME: 31.
コンパイラがその関数をどのように正確に処理するかわかりません。私が推測する%文字のテストがありますが、それはその違いにはなりません。コンパイラがメモリ内で何かを行っているように見えます... (?) このコードをコンパイルする正確な背景や、上記の違いが現れる理由を知っている人はいますか? または、少なくとも私に役立つリンクはありますか?
ありがとうございました。