64位时钟()的错误结果

时间:2009-10-29 11:55:37

标签: macos 64-bit clock

我使用C clock()函数获得了一个简单的基准测试功能。

start[timerId]=clock();
clock_t end;
float dif_sec;
end=clock();
dif_sec=((float)end-start[timerId])/CLOCKS_PER_SEC;
printf("%s: %f seconds\n", msg, dif_sec);

它在Mac OS X上以32位运行良好,但是当我以64位编译时,结果都是错误的。为什么呢?!

1 个答案:

答案 0 :(得分:2)

以下是我从代码的纯C版本(MacOS X 10.5.8 - Leopard; MacBook Pro)获得的内容:

#include <time.h>
#include <stdio.h>

int main(void)
{
    clock_t start = clock();
    clock_t end   = clock();
    float dif_sec = ((float)end-start)/CLOCKS_PER_SEC;
    printf("%s: %f seconds\n", "difference", dif_sec);
    printf("%s: %d\n", "CLOCKS_PER_SEC", CLOCKS_PER_SEC);
    return(0);
}

这就是我编译它的方法,然后运行它,以及我得到的结果:

Osiris JL: gcc -m32 -o xxx-32 xxx.c
Osiris JL: gcc -m64 -o xxx-64 xxx.c
Osiris JL: ./xxx-32
difference: 0.000006 seconds
CLOCKS_PER_SEC: 1000000
Osiris JL: ./xxx-64
difference: 0.000009 seconds
CLOCKS_PER_SEC: 1000000 
Osiris JL: ./xxx-64
difference: 0.000003 seconds
CLOCKS_PER_SEC: 1000000
Osiris JL: ./xxx-32
difference: 0.000003 seconds
CLOCKS_PER_SEC: 1000000
Osiris JL:

看起来很好 - 或许很快,但是没关系;它是一台不错的新机器,连续两次系统调用不需要很长时间。