c语言if-else的效率比较
2024-09-06 18:49:10
闲着没事测试下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#中Object和Json之间的转换
- grunt配置太复杂?使用Qbuild进行文件合并、压缩、格式化等处理
- foxmail收发gmail彻底失败
- linux中ulimit作用
- 转: Oracle AWR 报告 每天自动生成并发送邮箱
- C#、.NET和ASP.NET三者之间的区别
- 3_Guess Fingers
- thinkPHP 输出及其模板调用(三)
- 撸基础篇系列,JAVA的NIO部分
- MyEclipse中阿里JAVA代码规范插件(P3C)的安装及使用
- [asp.net mvc 奇淫巧技] 06 - 也许你的项目同一个用户的请求都是同步的
- 未来-区块链-IBM:IBM 区块链技术开发社区
- HTTP 02 HTTP1.1 协议
- CentOS防火墙配置
- IIC协议解释(转)
- Leetcode题库——46.全排列
- laravel服务l队列资料整理
- iOS分辨率的那些事儿(转)
- Openstack入门篇(十)之nova服务(计算节点)的部署与测试
- 学习jenv