c语言中运算符运行速度比较
来源:互联网 发布:形容人猥琐的网络词 编辑:程序博客网 时间:2024/06/06 03:08
运行坏境:虚拟机下ubuntu10.04, i3处理器
今天发现在pjsip开源代码在实现哈希表值的时候竟然不是使用常见的“%”运算,而是“&”这让我很好奇,猜想&运算比%运算要快,于是写了下面代码来验证自己的猜想,事实确实是这样的。
下面是比较运算符 (乘*、除/ 、求余数%、与&、或| )的运算时间比较
#include <stdio.h>#include <time.h>#include <sys/time.h>#define TOTAL_TIMES 1000000000int main(){int i, res[5] = {12389};struct timeval time[6];unsigned long sub[5] = {0}, least;//struct timeval tv1, tv2, tv3;gettimeofday(&time[0], NULL);for (i=0; i<TOTAL_TIMES; i++) res[0] *= 64;gettimeofday(&time[1], NULL);for (i=0; i<TOTAL_TIMES; i++) res[1] &= 64;gettimeofday(&time[2], NULL);for (i=0; i<TOTAL_TIMES; i++) res[2] |= 64;gettimeofday(&time[3], NULL);for (i=0; i<TOTAL_TIMES; i++) res[3] /= 64;gettimeofday(&time[4], NULL);for (i=0; i<TOTAL_TIMES; i++) res[4] %= 64;gettimeofday(&time[5], NULL);//time(&t2);for (i=0; i<6; i++){printf("second:%d,micro:%d\n", time[i].tv_sec, time[i].tv_usec);if (i > 0){ sub[i-1] = time[i].tv_sec*1000000-time[i-1].tv_sec*1000000 + time[i].tv_usec-time[i-1].tv_usec; printf("sub[%d] = %ld\n", i-1, sub[i-1]); if (i==1)least = sub[i-1]; else { if (sub[i-1] < least)least = sub[i-1]; }}}printf("the least:%ld\n", least);printf("ratio:(* & | / %)\n");for (i=0; i<5; i++) printf("%f\n", ((float)sub[i])/least);return 0;}
结果1:
second:1357635420,micro:84629
second:1357635422,micro:485139
sub[0] = 2400510
second:1357635424,micro:886265
sub[1] = 2401126
second:1357635427,micro:266230
sub[2] = 2379965
second:1357635430,micro:549131
sub[3] = 3282901
second:1357635434,micro:144127
sub[4] = 3594996
the least:2379965
ratio:(* & | / %)
1.008632
1.008891
1.000000
1.379390
1.510525
结果2:
second:1357635378,micro:207999
second:1357635380,micro:686956
sub[0] = 2478957
second:1357635383,micro:92050
sub[1] = 2405094
second:1357635385,micro:506162
sub[2] = 2414112
second:1357635388,micro:834081
sub[3] = 3327919
second:1357635392,micro:546280
sub[4] = 3712199
the least:2405094
ratio:(* & | / %)
1.030711
1.000000
1.003750
1.383696
1.543474
多次运行后发现,每次的结果并不完全相同,有时候“&=”计算最快,有时候“|=”计算最快,还有时候“*=”计算最快,所以总的说来可以确定的是:
1. &= 、|= 和*= 的计算时间大体相当,至于谁最快也不必过于计较了。
2. /=比%=运算更快些,但是都要比前面三个慢不少。
- c语言中运算符运行速度比较
- 快排的三种实现,以及三种实现运算速度的比较 c语言
- C语言编程优化运行速度
- C语言编程优化运行速度
- C语言编程优化运行速度
- C语言编程优化运行速度
- C语言之优化运行速度
- C语言编程优化运行速度
- C语言编程优化运行速度
- C语言编程优化运行速度
- C语言编程优化运行速度小结
- C语言编程优化运行速度
- C语言编程优化运行速度
- C语言编程优化运行速度
- C语言编程优化运行速度
- C语言编程优化运行速度
- C语言编程优化运行速度
- C语言编程优化运行速度
- 安装IIS遇到无法找到文件时的解决方案
- YY工作总结—为人处事
- <小白向>修改开关机外屏上的“中国电信”字样
- “应用程序配置不正确,程序无法启动”的解决方法资料收集
- 那些未理解的javascript死角
- c语言中运算符运行速度比较
- 类的初始化问题
- Spring 3.1配置文件示例(备忘)
- 第八章 BIRT交叉报表
- c++基础10:继承和派生 虚函数的作用 多态性概念 纯虚函数和抽象类的概念
- hibernate in查询
- c# code pad version 1.0
- Nutch 插件系统浅析
- linux环境变量