c语言if-else的效率比较
闲着没事测试下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的效率比较的更多相关文章
- Leaf - 一个由 Go 语言编写的开发效率和执行效率并重的开源游戏服务器框架
转自:https://toutiao.io/posts/0l7l7n/preview Leaf 游戏服务器框架简介 Leaf 是一个由 Go 语言(golang)编写的开发效率和执行效率并重的开源游戏 ...
- 基于R语言的RRT算法效率统计
- 关于提高python程序执行效率的思路和想法
相比编译型语言(C系列)python胜在简介的语法和优雅的动态编程体验,但是在执行效率上,python有解释性语言先天的劣势——执行效率较低,为了让编写出的程序获得更快的执行效率,开启此文章. pyt ...
- 我为什么选择使用Go语言?
谢孟军:EGO会员.GopherChina组织者.<Go Web编程>一书的作者,专注Golang技术架构.本文来自EGO会员群分享,入群方式见文末 在这里我主要想和大家分享一些Go和我个 ...
- atitit groovy 总结java 提升效率
atitit groovy 总结java 提升效率 #---环境配置 1 #------安装麻烦的 2 三.创建groovy项目 2 3. 添加 Groovy 类 2 4. 编译运行groovy类 ...
- Qt 框架的图形性能高(OpenGL上的系统效率高),网络性能低,开发效率高,Quick是可以走硬件加速——Qt中分为好几套图形系统,差不多代表了2D描画的发展史。最经典的软描画系统
-----图形性能部分-----Qt的widgets部分,运行时的图像渲染性能是一般的,因为大部分的界面内容都是Qt自绘,没有走硬件加速,也就是说很多图形内容都是CPU算出来的.但是widgets底层 ...
- c语言入门
c 语言现在是一门很流行的语言,它介于汇编语言和高级语言之间,我认为 它属于中级语言,如c语言 的指针 ,位操作符,等,因为接近于汇编语言,c语言的执行代码效率很高 现在大多数的系统 如unix,和l ...
- 三分钟了解Go语言的前世今生
一. 为什么需要一个新的语言最近十年来,C/C++在计算领域没有很好得到发展,并没有新的系统编程语言出现.对开发程度和系统效率在很多情况下不能兼得.要么执行效率高,但低效的开发和编译,如C++:要么执 ...
- day02编程语言,Python语言介绍,Python解释器安装,环境变量,Python代码执行,pip,应用程序使用文件的三步骤,变量,变量的三大组成,比较,pycharm
复习 重点: 1.进制转换:二进制 与十六进制 2.内存分布:栈区 与堆区 # 二进制1111转换十六进制 => 8 4 2 1 => f 10101100111011 => 2a7 ...
- 为什么一定要学Go语言
Go语言是谷歌2009发布的第二款开源编程语言.Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全.支持并行进程. 为什么要选择学习Go ...
随机推荐
- MySQL8.0哪些新特性你最期待
1.数据字典全部采用InnoDB引擎存储,支持DDL原子性.crash safe,metadata管理更完善 2.快速在线加新列(腾讯互娱DBA团队贡献) 3.并行redo log,并提升redo l ...
- 第十章 MIZ702 ZYNQ制作UBOOT固化程序
10.0难度系数★☆☆☆☆☆☆ 10.1是什么是固化 我们前几章将的程序都是通过JTAG先下载bit流文件,再下载elf文件,之后点击Run As来运行的程序.JTAG的方法是通过TCL脚本来初始化P ...
- MySQL 聚合函数(四)检测功能依赖
源自MySQL 5.7 官方手册:12.20.4 Detection of Functional Dependence 本节提供了MySQL检测功能依赖的方式的几个示例.这些示例使用此表示法: {X} ...
- 手工实现HttpBasic校验
HttpBasic: 是RFC中定义的一种控制HTTP协议访问资源的方式.具体当HTTP请求受限资源时,就需要在请求头中添加以"Authorization"为key的heade ...
- html与css注意事项及小知识点
html 常用的html特殊符号: 空格:&npsd: 版权所有符号:©: 注册商标符号:®: 有两个标签容器:<span>和<div> ...
- TypeScript入门五:TypeScript的接口
TypeScript接口的基本使用 TypeScript函数类型接口 TypeScript可索引类型接口 TypeScript类类型接口 TypeScript接口与继承 一.TypeScript接口的 ...
- hbulider 快捷键
跳转到行 Ctrl + G 页首 Ctrl + Home 页尾 Ctrl + End 下一个选项卡 Ctrl + Tab 上一个 ...
- 内核开机logo
安装 # sudo apt-getinstall netpbm 制图 # bmptoppm logo.bmp > logo.ppm # ppmquant 224 logo.ppm > lo ...
- sed交换任意两行
命令: sed -n 'A{h;n;B!{:a;N;C!ba;x;H;n};x;H;x};p' 文件名 解释: A.B分别是需要交换的行,C是B-1 其中,A.B.C可以是行号,也可以通过匹配模式,如 ...
- com.android.ddmlib.adbcommandrejectedexception:未经授权的设备。
出现这种问题的原因是adb被杀死了,根据网上的说法在platform-tools下双击adb.exe 也启动不了. 在命令提示符中执行 adb kill-server adb start-ser ...