我在使用time.h库的C语言中获得了一些乐趣,试图测量一些基本函数的时钟滴答数,只是为了弄清楚它们实际上有多快。我使用了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();
}
该程序基本上只是计算 2000 次的时钟滴答数的 20 倍,称为 printf("a") 函数。
我不明白的奇怪的事情是结果。大多数时候,即使在进行其他测试时,我也会随机获得两组结果:
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.
我不明白编译器究竟是如何处理该函数的。我猜对%字符进行了一些测试,但这不会产生影响。看起来更像是编译器在内存中做某事......(?)有谁知道编译这段代码的确切背景,或者为什么会出现上面提到的差异?或者至少有一些对我有帮助的链接?
谢谢你。