闲着没事测试下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. golang数据类型

    整数类型   Golang各整数类型分:有符号和无符号,int uint 的大小和系统有关. Golang查看一个变量的数据类型: package main import "fmt" ...

  2. 输入一个正整数n,输出所有和为n的连续正整数序列

    public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (true) { System. ...

  3. 【Trie】The XOR-longest Path

    [题目链接]: https://loj.ac/problem/10056 [题意] 请输出树上两个点的异或路径  的最大值. [题解] 这个题目,y总说过怎么做之后,简直就是醍醐灌顶了. 我们知道Xo ...

  4. VS2013 + Nunit 安装搭建

    Nunit 官方给我提供了Nunit 3的四种安装方式 第一种 通过NuGet进行Full Nunit安装 第二种 通过NuGet进行轻量级 NunitLite 安装 第三种 通过Zip 压缩包下载安 ...

  5. .Net C# interface使用

    using System; using System.ServiceModel; namespace com._80community.unittest.Demo { public delegate ...

  6. js实现div转图片并保存

    最近工作中遇到的需求,将div转成图片并保存. 1.准备需要用到的js插件jquery-1.8.2.js,html2canvas.min.js(将div转换为canvas),bluebird.js(用 ...

  7. Shiro——入门Demo

    Shiro——入门Demo 环境-  引入相关maven依赖, shiro-core,commons-logging 配置shiro配置文件:ini后缀 主方法测试: import org.apach ...

  8. Linux环境下MySql安装和常见问题的解决

    MySql安装 首先当然是要连接上linux服务器咯,然后就是下面的命令甩过去,梭哈,一通运行就是啦   梭哈 下载: sudo wget http://dev.mysql.com/get/mysql ...

  9. Win10 通过附加进程调试时出现“此任务要求应用程序具有提升的权限”

    最近有新人在使用vs调试时出现了“此任务要求应用程序具有提升的权限”的提示,每次调试vs就会重启一次. 问到我时,我经过查了一番资料才给解决掉了. 其实,问题主要是因为直接启动vs项目时没有足够的权限 ...

  10. 利用commands模块执行shell命令

    利用commands模块执行shell命令 用Python写运维脚本时,经常需要执行linux shell的命令,Python中的commands模块专门用于调用Linux shell命令,并返回状态 ...