闲着没事测试下if-else的执行效率

测试环境:Mac pro i7 2.3Ghz 。。。编译器gcc 4.9,代码没有进行优化-O0;

测试代码:c代码1:

int main(){
int n=100000000;
int b=-1;
int a=0;
while(n-->0){
if(b<0) b--;else b--;
if(b<0) b--;else b--;
if(b<0) b--;else b--;
if(b<0) b--;else b--;
if(b<0) b--;else b--;
if(b<0) b--;else b--;
if(b<0) b--;else b--;
if(b<0) b--;else b--;
if(b<0) b--;else b--;
if(b<0) b--;else b--; }
return 0; }

汇编代码1:

_main:
LFB0:
pushl %ebp
LCFI0:
movl %esp, %ebp
LCFI1:
subl $16, %esp
movl $100000000, -4(%ebp)
movl $-1, -8(%ebp)
movl $0, -12(%ebp)
jmp L2
L22:
cmpl $0, -8(%ebp)
jns L3
subl $1, -8(%ebp)
jmp L4
L3:
subl $1, -8(%ebp)
L4:
cmpl $0, -8(%ebp)
jns L5
subl $1, -8(%ebp)
jmp L6
L5:
subl $1, -8(%ebp)
L6:
cmpl $0, -8(%ebp)
jns L7
subl $1, -8(%ebp)
jmp L8
L7:
subl $1, -8(%ebp)
L8:
cmpl $0, -8(%ebp)
jns L9
subl $1, -8(%ebp)
jmp L10
L9:
subl $1, -8(%ebp)
L10:
cmpl $0, -8(%ebp)
jns L11
subl $1, -8(%ebp)
jmp L12
L11:
subl $1, -8(%ebp)
L12:
cmpl $0, -8(%ebp)
jns L13
subl $1, -8(%ebp)
jmp L14
L13:
subl $1, -8(%ebp)
L14:
cmpl $0, -8(%ebp)
jns L15
subl $1, -8(%ebp)
jmp L16
L15:
subl $1, -8(%ebp)
L16:
cmpl $0, -8(%ebp)
jns L17
subl $1, -8(%ebp)
jmp L18
L17:
subl $1, -8(%ebp)
L18:
cmpl $0, -8(%ebp)
jns L19
subl $1, -8(%ebp)
jmp L20
L19:
subl $1, -8(%ebp)
L20:
cmpl $0, -8(%ebp)
jns L21
subl $1, -8(%ebp)
jmp L2
L21:
subl $1, -8(%ebp)
L2:
movl -4(%ebp), %eax
leal -1(%eax), %edx
movl %edx, -4(%ebp)
testl %eax, %eax
jg L22
movl $0, %eax
leave

c代码2:

int main(){
int n=100000000;
int b=-1;
int a=0;
while(n-->0){
if(b>0) b--;else b--;
if(b>0) b--;else b--;
if(b>0) b--;else b--;
if(b>0) b--;else b--;
if(b>0) b--;else b--;
if(b>0) b--;else b--;
if(b>0) b--;else b--;
if(b>0) b--;else b--;
if(b>0) b--;else b--;
if(b>0) b--;else b--; }
return 0; }

汇编代码2:

_main:
LFB0:
pushl %ebp
LCFI0:
movl %esp, %ebp
LCFI1:
subl $16, %esp
movl $100000000, -4(%ebp)
movl $-1, -8(%ebp)
movl $0, -12(%ebp)
jmp L2
L22:
cmpl $0, -8(%ebp)
jle L3
subl $1, -8(%ebp)
jmp L4
L3:
subl $1, -8(%ebp)
L4:
cmpl $0, -8(%ebp)
jle L5
subl $1, -8(%ebp)
jmp L6
L5:
subl $1, -8(%ebp)
L6:
cmpl $0, -8(%ebp)
jle L7
subl $1, -8(%ebp)
jmp L8
L7:
subl $1, -8(%ebp)
L8:
cmpl $0, -8(%ebp)
jle L9
subl $1, -8(%ebp)
jmp L10
L9:
subl $1, -8(%ebp)
L10:
cmpl $0, -8(%ebp)
jle L11
subl $1, -8(%ebp)
jmp L12
L11:
subl $1, -8(%ebp)
L12:
cmpl $0, -8(%ebp)
jle L13
subl $1, -8(%ebp)
jmp L14
L13:
subl $1, -8(%ebp)
L14:
cmpl $0, -8(%ebp)
jle L15
subl $1, -8(%ebp)
jmp L16
L15:
subl $1, -8(%ebp)
L16:
cmpl $0, -8(%ebp)
jle L17
subl $1, -8(%ebp)
jmp L18
L17:
subl $1, -8(%ebp)
L18:
cmpl $0, -8(%ebp)
jle L19
subl $1, -8(%ebp)
jmp L20
L19:
subl $1, -8(%ebp)
L20:
cmpl $0, -8(%ebp)
jle L21
subl $1, -8(%ebp)
jmp L2
L21:
subl $1, -8(%ebp)
L2:
movl -4(%ebp), %eax
leal -1(%eax), %edx
movl %edx, -4(%ebp)
testl %eax, %eax
jg L22
movl $0, %eax
leave

执行结果:

看来else执行的效率高一些。。。。

c语言if-else的效率比较的更多相关文章

  1. Leaf - 一个由 Go 语言编写的开发效率和执行效率并重的开源游戏服务器框架

    转自:https://toutiao.io/posts/0l7l7n/preview Leaf 游戏服务器框架简介 Leaf 是一个由 Go 语言(golang)编写的开发效率和执行效率并重的开源游戏 ...

  2. 基于R语言的RRT算法效率统计

  3. 关于提高python程序执行效率的思路和想法

    相比编译型语言(C系列)python胜在简介的语法和优雅的动态编程体验,但是在执行效率上,python有解释性语言先天的劣势——执行效率较低,为了让编写出的程序获得更快的执行效率,开启此文章. pyt ...

  4. 我为什么选择使用Go语言?

    谢孟军:EGO会员.GopherChina组织者.<Go Web编程>一书的作者,专注Golang技术架构.本文来自EGO会员群分享,入群方式见文末 在这里我主要想和大家分享一些Go和我个 ...

  5. atitit groovy 总结java 提升效率

    atitit groovy 总结java 提升效率 #---环境配置 1 #------安装麻烦的 2 三.创建groovy项目 2 3.  添加 Groovy 类 2 4.  编译运行groovy类 ...

  6. Qt 框架的图形性能高(OpenGL上的系统效率高),网络性能低,开发效率高,Quick是可以走硬件加速——Qt中分为好几套图形系统,差不多代表了2D描画的发展史。最经典的软描画系统

    -----图形性能部分-----Qt的widgets部分,运行时的图像渲染性能是一般的,因为大部分的界面内容都是Qt自绘,没有走硬件加速,也就是说很多图形内容都是CPU算出来的.但是widgets底层 ...

  7. c语言入门

    c 语言现在是一门很流行的语言,它介于汇编语言和高级语言之间,我认为 它属于中级语言,如c语言 的指针 ,位操作符,等,因为接近于汇编语言,c语言的执行代码效率很高 现在大多数的系统 如unix,和l ...

  8. 三分钟了解Go语言的前世今生

    一. 为什么需要一个新的语言最近十年来,C/C++在计算领域没有很好得到发展,并没有新的系统编程语言出现.对开发程度和系统效率在很多情况下不能兼得.要么执行效率高,但低效的开发和编译,如C++:要么执 ...

  9. day02编程语言,Python语言介绍,Python解释器安装,环境变量,Python代码执行,pip,应用程序使用文件的三步骤,变量,变量的三大组成,比较,pycharm

    复习 重点: 1.进制转换:二进制 与十六进制 2.内存分布:栈区 与堆区 # 二进制1111转换十六进制 => 8 4 2 1 => f 10101100111011 => 2a7 ...

  10. 为什么一定要学Go语言

    Go语言是谷歌2009发布的第二款开源编程语言.Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全.支持并行进程. 为什么要选择学习Go ...

随机推荐

  1. php验证手机号记录

    看完就忘记录一下 正则: $roue = "/^1[3-9]\d{9}$/"; 前后/...... / 是正则必须的规则 ^1 : 手机号的必须是1开头   ^: 字符串开始的地方 ...

  2. Python 第二式

    @Codewars Python练习 question ** Simple transposition ** Simple transposition is a basic and simple cr ...

  3. vue项目build 之后,css文件加载图片或者字体文件时404的解决。

    ExtractTextWebpackPlugin 提供了一个 options.publicPath 的 api,可以为css单独配置 publicPath . 对于用 vue-cli 生成的项目,di ...

  4. 「网络流 24 题」最长 k 可重区间集

    给定区间集合$I$和正整数$k$, 计算$I$的最长$k$可重区间集的长度. 区间离散化到$[1,2n]$, $S$与$1$连边$(k,0)$, $i$与$i+1$连边$(k,0)$, $2n$与$T ...

  5. Asp.net core 学习笔记 QR code and Barcode

    QR code 和 Barcode 经常会使用到. Java 阵营有著名的 zxing https://github.com/zxing/zxing .Net 有对接它的 port https://g ...

  6. 怎样获取所有style节点

    通过 document.styleSheets 获取所有的样式表节点. document.styleSheets instanceof StyleSheetList; // true 注意: 1. 返 ...

  7. selenium之动作链

    概念:一组连续的行为动作 爬取网站:https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable 背景:把左边的方块横竖往下便宜 ...

  8. 微信小程序编译提示tabar.iconPath 文件不存在

    tabBar.list[0].iconPath 文件不存在 明明是按路径放了本地图片的,却依然显示路径不存在 需要把路径的图片转移到编译后的weapp文件中相同路径下的img文件中 本地正常路径 粘贴 ...

  9. ::selection伪元素改变文本选中颜色

    在看张鑫旭大神的文章,刚刚发现了这个,感觉应该后面有用,先存起来. 效果如下: 代码如下: <!DOCTYPE html> <html> <head> <me ...

  10. opencv3.0中contrib模块的添加+实现SIFT/SURF算法

    平台:win10 x64 +VS 2015专业版 +opencv-3.x.+CMake+Anaconda3(python3.7.0) Issue说明:Opencv3.0版本已经发布了有一段时间,在这段 ...