缘由:
在追求急速的处理过程中判断是必不可少的分支条件,那么存在三目运算符 A ?A:0这种取值 和if else 分支取值应该用哪个更好呢,那就取决于到底这两个语句之间有什么差异
话不多说先上测试代码:代码很简单
linux:
#include <stdio.h> #include <sys/time.h> int main(int argc, char **argv){ struct timeval start, end; int a = 1,b=2,c=0; const long long count = 10000000000; gettimeofday(&start,NULL); for (long long i = 0; i < count; i++) { if (a>b) c=a; else c=b; } gettimeofday(&end,NULL); long long beginTime = (long long)start.tv_sec * 1000 + (long long)start.tv_usec / 1000; long long endTime = (long long)end.tv_sec * 1000 + (long long)end.tv_usec / 1000; printf("--if--cost:%d ms.\n",( endTime-beginTime)); gettimeofday(&start,NULL); for (long long i = 0; i < count; i++) { c=a>b?a:b; } gettimeofday(&end,NULL); beginTime = (long long)start.tv_sec * 1000 + (long long)start.tv_usec / 1000; endTime = (long long)end.tv_sec * 1000 + (long long)end.tv_usec / 1000; printf("--?:--cost:%d ms.\n",endTime-beginTime); return 0; }
在使用100亿次循环测试结果如下:
Centos下测试效率基本相当,前后几次测试结果,两者效率近乎等价,毕竟100亿次的测试结果已经够说明问题了
windows:
win下的同样执行100亿次的循环比较测试,多次测试后,结果如下:
当windows的执行次数下降到1000W次时,结果如下
三目运算符还稍微快一点
结论:
在linux下if else 和三目运算符效率相当,
在windows下if else的效率在100亿次的循环中强于三目运算符,但是在小于1亿次以下的循环是三目运算符快一点
底层实现:
三目运算符需要10条汇编指令,if else 需要8条汇编指令,但是对于不同的系统编译出来的也有差异。