Я кодирую в c++ и работаю над Visual Studio 2010. Я пытаюсь вычислить время выполнения функции для выполнения, вот мой код
double sum=0;
clock_t start_s=clock();
for(int j=1;j<size;j++)
{
int key=data[j];
int i=j-1;
while(i>=0 && data[i]>key)
{
data[i+1]=data[i];
i=i-1;
}
data[i+1]=key;
}
clock_t stop_s=clock();
sum=((double)(stop_s - start_s)/CLOCKS_PER_SEC);
но проблема в том, что время вычисляется до 0. Как я могу измерить время в еще меньшей единице
Одним из возможных решений является запуск этого сегмента кода, например, 100 000 раз, а затем вычисление среднего времени
double sum=0;
clock_t start_s=clock();
int x = 0;
while (x < 100000)
{
for(int j=1;j<size;j++)
{
int key=data[j];
int i=j-1;
while(i>=0 && data[i]>key)
{
data[i+1]=data[i];
i=i-1;
}
data[i+1]=key;
}
x++;
}
clock_t stop_s=clock();
sum=((double)(stop_s - start_s)/CLOCKS_PER_SEC)/100000; //average time
clock()
даст вам разрешение 1 мс. Если вы хотите более высокое разрешение, используйте QueryPerformanceCounter функцию, и QueryPerformanceFrequency
Похоже, clock()
возвращает миллисекундные тики в Windows.
Чтобы получить лучшую детализацию, вы должны использовать счетчик производительности с высоким разрешением Windows. Вызовите QueryPerformanceFrequency
и QueryPerformanceCounter
.