给出以下代码
#include<time.h>
#include <stdio.h>
#include <stdlib.h>
void firstSequence()
{
int columns = 999999;
int rows = 400000;
int **matrix;
int j;
int counter = 0;
matrix = (int **)malloc(columns*sizeof(int*));
for(j=0;j<columns;j++)
{
matrix[j]=(int*)malloc(rows*sizeof(int));
}
for(counter = 1;counter < columns; counter ++)
{
free(matrix[counter]);
}
}
void secondSequence()
{
int columns = 111;
int rows = 600000;
int **matrix;
int j;
matrix = (int **)malloc(columns*sizeof(int*));
for(j=0;j<columns;j++)
{
matrix[j]=(int*)malloc(rows*sizeof(int));
}
}
int main()
{
long t1;
long t2;
long diff;
t1 = clock();
firstSequence();
t2 = clock();
diff = (t2-t1) * 1000.0 / CLOCKS_PER_SEC;
printf("%f",t2);
t1 = clock();
secondSequence();
t2 = clock();
diff = (t2-t1) * 1000.0 / CLOCKS_PER_SEC;
printf("%f",diff);
return(0);
}
我需要能够看到序列1和序列2运行需要多长时间。然而,两次我都过了0。从在线查看我已经看到这可能是一个问题,但我不知道如何解决问题
答案 0 :(得分:2)
您错误地显示时间,因此即使您的函数占用时间超过0毫秒,对printf()
的调用也会调用未定义的行为。
printf("%f",diff);
%f
用于显示双打。您可能想要使用%ld
。
如果您的函数确实需要0 ms来执行,那么计算一次调用该函数的时间的简单方法是多次调用它,即使是可测量的,然后取平均时间的平均值。
答案 1 :(得分:0)
clock
不适合计算程序使用的时间。
您应该使用clock_gettime
代替。 detail explain about clock_gettime
简单用法:
struct timespec start, end;
clock_gettime(CLOCK_REALTIME, &start);
for(int i = 0; i < 10000; i++) {
f1();
}
clock_gettime(CLOCK_REALTIME, &end);
cout <<"time elapsed = " << (double)((end.tv_sec - start.tv_sec)*1000000 + end.tv_nsec - start.tv_nsec) << endl;
PS:当您在linux
上进行编译时,请记住使用-lrt
。