time(&begin);
int iterations = 1000*1000*1000;
for (int i=0; i
sum += add;
add /= 2.0;
// Stop measuring time and calculate the elapsed time
time(&end);
time_t elapsed = end - begin;
printf("Result: %.20fn", sum);
printf("Time measured: %ld seconds.n", elapsed);
return 0;
time_t实际上就是alias long int , 因此你可以直接用printf()和cout进行打印
5.#include clock() - for Linux & Windows, CPU time on Linux, Wall time on Windows, seconds
clock()会返回在程序开始执行之后的clock ticks. 你可以通过他去除以CLOCKS_PER_SEC(在自己的Linux虚拟机测下来这个值是1000000) , 你会得到程序执行了多少时间(s).但是这对于不同的操作系统 , 行为是不一样的 , 比如在Linux,你得到的是CPU time , 在Windows,你得到的是Wall time.因此你需要特别小心
#include
#include
int main () {
double sum = 0;
double add = 1;
// Start measuring time
clock_t start = clock();
int iterations = 1000*1000*1000;
for (int i=0; i
sum += add;
add /= 2.0;
// Stop measuring time and calculate the elapsed time
clock_t end = clock();
double elapsed = double(end - start)/CLOCKS_PER_SEC;
printf("Result: %.20fn", sum);
printf("Time measured: %.3f seconds.n", elapsed);
return 0;
clock_t本身也是long int, 所以当你用除法去除以CLOCKS_PER_SEC的时候 , 你需要先转换到double , 否则你会因为整除而失去信息
6.#include clock_gettime() - for Linux Only,Wall time / CPU time , nanoseconds
这个API是比较强大的 , 因为他既可以用来测Wall time又可以用来测CPU time,同时他支持nanoseconds级别 。但是他唯一的不好的地方就是他只适用于Unix.你可以通过flag来控制测量wall time或者是CPU time , 通过对应的CLOCK_PROCESS_CPUTIME_ID(wall time)或者CLOCK_REALTIME(CPU time)
#include
#include
int main () {
double sum = 0;
double add = 1;
【C/C++的8种时间度量方式以及代码片段】// Start measuring time
struct timespec begin, end;
clock_gettime(CLOCK_REALTIME, &begin);
int iterations = 1000*1000*1000;
for (int i=0; i
sum += add;
add /= 2.0;
// Stop measuring time and calculate the elapsed time
clock_gettime(CLOCK_REALTIME, &end);
long seconds = end.tv_sec - begin.tv_sec;
long nanoseconds = end.tv_nsec - begin.tv_nsec;
double elapsed = seconds + nanoseconds*1e-9;
printf("Result: %.20fn", sum);
printf("Time measured: %.3f seconds.n", elapsed);
return 0;
除了CLOCK_REALTIME和CLOCK_PROCESS_CPUTIME_ID之外 , 你可以使用其他的clock types. 这里的timespec跟gettimeofday()的timeval很类似 , 但是timeval包含的是microseconds,而timespec包含的是nanoseconds
7.#include GetTickCount64() - for Windows Only, milliseconds
返回当系统开机之后的millseconds毫秒个数 , 同样这里也有32位的版本GetTickCount(), 但是他会把时间限制在49.71 days,所以用64 bit都是比较好的
#include
#include
int main () {
double sum = 0;
double add = 1;
// Start measuring time
long long int begin = GetTickCount64();
int iterations = 1000*1000*1000;
for (int i=0; i
sum += add;
add /= 2.0;
// Stop measuring time and calculate the elapsed time
long long int end = GetTickCount64();
double elapsed = (end - begin)*1e-3;
printf("Result: %.20fn", sum);
printf("Time measured: %.3f seconds.n", elapsed);
return 0;
8.#include GetProcessTimes() - for Windows Only(但是这时唯一可以在Windows上测量CPU time的方法), CPU time
原理本身比较复杂 , 如果有兴趣可以自己找资料继续阅读
#include
#include
double get_cpu_time(){
FILETIME a,b,c,d;
if (GetProcessTimes(GetCurrentProcess(),&a,&b,&c,&d) != 0){
// Returns total user time.
// Can be tweaked to include kernel times as well.
return
(double)(d.dwLowDateTime |
((unsigned long long)d.dwHighDateTime << 32)) * 0.0000001;
}else{
// Handle error
return 0;
int main () {
double sum = 0;
double add = 1;
// Start measuring time
double begin = get_cpu_time();
int iterations = 1000*1000*1000;
for (int i=0; i
sum += add;
add /= 2.0;
// Stop measuring time and calculate the elapsed time
double end = get_cpu_time();
double elapsed = (end - begin);
printf("Result: %.20fn", sum);
推荐阅读
- 新电脑必记的六大命令,收藏好,受用终身!
- 要想网速快,建议关闭路由器的双频合一
- excel怎么转pdf,分享最高效的方法
- 对一个老病毒wukill的简单分析
- 绝对干货,超全的 MyBatis 动态代理原理讲解!
- 贸易全球化和资本全球化的区别?贸易全球化的特征?
- 粒粒香照样子写词语;吃的很欢、急的直哭类似的词语
- 《望岳》中的岱宗指的是什么山 望岳岱宗指的是什么山
- 陶渊明作品赏析__陶渊明的主要作品?有《饮酒》,《桃花源记》,《归去来兮辞》,《五柳先生传》等?
- Excel xls和xlsx有什么区别 表格xls和xlsx的区别