有个很奇怪的现象,我自认为写得好的文章阅读量只有一百多,随手写的却有一千多——要么是胡搞,要么是比较浅显。纵观博客园里众多阅读过万的文章,若非绝世之作,则必为介绍入门级知识的短文。为了让我的十八线博客上升到十七线,我打算写几篇短文。当然,短不等于随便,不等于不负责任。客观的,要有确凿的依据,代码必须调通;主观的,观点尽量全面。
前两天写C++值多态,最后有一个性能比较,需要测量程序运行的时间,于是我重温了相关知识,现整理如下。
C风格
在C程序和C++11以前的C++程序中,测量程序运行时间一般使用clock函数和CLOCKS_PER_SEC常量,定义在中。
clock_t是一种能表示时钟周期数的算术类型,在MSVC和GCC中都是long。
clock函数返回自一个与程序执行相关的时间起至调用时刻经过的时钟周期数,类型为clock_t。由于起始时间是由实现定义的,clock函数的返回值没有直接的意义,只有两次调用clock的结果之差才有意义。
CLOCKS_PER_SEC表示一秒有多少个时钟周期,在MSVC和GCC中都是1000,即C风格时间测量的精度为1毫秒。如果long的大小是4字节,clock溢出需要24天,一般情况下足够使用。
#include
#include
int work()
{
int sum = 0;
for (int i = 0; i < 1e8; ++i)
sum += i * i;
return sum;
}
int main()
{
clock_t start, finish;
start = clock();
volatile int result = work();
finish = clock();
printf("%fms\n", (double)(finish - start) / CLOCKS_PER_SEC * 1000);
}
C++风格
从C++11起,C++提供了更加现代的时间工具,定义在中,namespace std::