C 语言实现程序计时笔记
程序员文章站
2024-02-26 22:06:16
...
有的时候写C代码,想知道代码的执行时间,不知道怎么做。心想要是java就好了,System.currentTimeMillis()或者System.nanoTime(),真的是很方便。经过查阅在C里可以这样做:
#include "stdio.h"
#include "time.h"
int main(int argc, char *argv[])
{
clock_t start, finish;
int i, tmp;
start = clock();
for (i = 0; i < 10 * 1000; i++)
{
tmp = i + i * 2;
}
finish = clock();
printf("%d\n", (finish - start) / CLOCKS_PER_SEC);
return 0;
}
原来C的标准库time.h已经提供好了工具。
同时,程序里的clock_t和clock()函数以及CLOCKS_PER_SEC引起了我的兴趣。它们究竟是什么样子呢?
借助于C++,在C-Free和Mingw2.95的编译下,我打印了它们的一些信息。
#include <iostream>
#include <typeinfo>
#include "time.h"
using namespace std;
int main(int argc, char *argv[])
{
cout << typeid(clock_t).name() << endl;
cout << typeid(CLOCKS_PER_SEC).name() << endl;
cout << CLOCKS_PER_SEC << endl;
return 0;
}
第一行的打印结果不是1, 而是字母l, 说明clock_t是long类型。
第二行信息,说明CLOCKS_PER_SEC是double类型,第三行是1000, 则说明CLOCKS_PER_SEC的值应该是1000.0
至于clock()函数,还不知道代表着什么,经过部门里C大牛的提醒,我想起了Mingw2.95肯定带的有time.h这个库文件。
找到time.h,我查看了一下,CLOCKS_PER_SEC和clock_t,果然就是上面的结果。
clock_t表示处理器时钟滴答次数的类型。
CLOCKS_PER_SEC表示一秒钟时钟滴答的次数。
至于clock()函数,还是没看到内部实现,也没有看到注释信息。
这个看来还是需要查官方文档了。后续更新。
下一篇: 数值计算+GPU加速算法