1

给出下面的代码

#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);
}

我需要能够查看序列一和序列二运行需要多长时间。但是,随着时间的流逝,我两次都得到 0。从网上看,我发现这可能是一个问题,但我不知道如何解决这个问题

4

2 回答 2

2

您显示的时间不正确,因此即使您的函数花费的时间超过 0 毫秒,调用也会printf()调用未定义的行为。

printf("%f",diff);

%f用于显示双打。您可能想使用%ld.

如果您的函数确实需要 0 毫秒来执行,那么计算一次调用函数的时间的一种简单方法是多次调用它,即使是可测量的,然后取总时间的平均值。

于 2013-09-25T20:07:35.797 回答
0

clock不是计算程序使用时间的合适函数。

你应该clock_gettime改用。 详细解释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.

于 2014-01-13T03:38:12.800 回答