从 C 中的这个 clock() 函数中得到一个意想不到的答案


int main (int argc, const char * argv[]) {
    clock_t time1, time2;
    time1 = clock();
    //time1 = gettimeofday();

    add();
    time2 = clock();
    //time2= gettimeofday();
    float time = ((float)time2 - (float)time1) / 1000000.0F;
    printf("%fsn", time);
    return 0;
}

我最终从中得到了类似 0.288640991s 的东西(不确定上面的当前代码是否向右有那么多数字。但我期待这条线的几秒钟:

float time = ((float)time2 - (float)time1) / 1000000.0F;

当我除以 10000.0F 时,我得到 28 秒的实时时间,这就是实际情况。那么为什么上面的行不这样做呢?

编辑:我正在使用Mac,我听说有问题。

首先,你应该使用CLOCKS_PER_SEC而不是一些幻数。

无论如何,如果您在POSIX系统中,CLOCKS_PER_SEC在POSIX中被定义为一百万(与您正在使用的值相同(,因此这可能不是您的问题。

您必须知道,clock只测量处理器运行您的用户空间程序的时间,而不是在内核或其他进程中花费的时间。这很重要,因为如果您调用系统调用或调用系统调用的函数,或者您的进程被内核抢占,则clock结果对您来说可能是错误的。

例如,请参阅以下内容:

 time_t time1, time2;
 time1 = clock();
 sleep(5);
 time2 = clock();

sleep调用之前和之后clock返回值的差值(用CLOCKS_PER_SEC正确规范化(很可能为 0 秒。

如果要测量函数或代码块执行期间经过的时间,最好使用函数gettimeofday

clock()返回自程序启动以来经过的时钟周期数。

为了将其转换为秒,您必须除以 CLOCKS_PER_SEC ,而不是 1000000.0F .


无耻的自我推销:

或者,您可以使用我的秒表.h和秒表.c来测量经过的时间。

相关内容

  • 没有找到相关文章

最新更新