Я немного повеселился на языке 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();
}
Программа просто в основном считает 20-кратное количество тактов2000 раз вызывал функцию 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.
Я не понимаю, как именно компилятор обрабатывает эту функцию.Я полагаю, что есть тест для символа % , но это не будет иметь значения.Похоже, компилятор что-то делает в памяти ... (?) Кто-нибудь знает точную основу компиляции этого кода или почему появляется такое различие, упомянутое выше?Или хоть какая-нибудь ссылка, которая мне поможет?
Спасибо.