热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C语言优化ifelse,c语言ifelse的效率比较

闲着没事测试下if-else的执行效率测试环境:Macproi72.3Ghz。。。编译器gcc4.9,代码没有进行优化-O0;测试代码&#

闲着没事测试下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&#xff1a;

_main:

LFB0:

pushl%ebp

LCFI0:

movl%esp, %ebp

LCFI1:

subl$16, %esp

movl$100000000, -4(%ebp)

movl$-1, -8(%ebp)

movl$0, -12(%ebp)

jmpL2

L22:

cmpl$0, -8(%ebp)

jnsL3

subl$1, -8(%ebp)

jmpL4

L3:

subl$1, -8(%ebp)

L4:

cmpl$0, -8(%ebp)

jnsL5

subl$1, -8(%ebp)

jmpL6

L5:

subl$1, -8(%ebp)

L6:

cmpl$0, -8(%ebp)

jnsL7

subl$1, -8(%ebp)

jmpL8

L7:

subl$1, -8(%ebp)

L8:

cmpl$0, -8(%ebp)

jnsL9

subl$1, -8(%ebp)

jmpL10

L9:

subl$1, -8(%ebp)

L10:

cmpl$0, -8(%ebp)

jnsL11

subl$1, -8(%ebp)

jmpL12

L11:

subl$1, -8(%ebp)

L12:

cmpl$0, -8(%ebp)

jnsL13

subl$1, -8(%ebp)

jmpL14

L13:

subl$1, -8(%ebp)

L14:

cmpl$0, -8(%ebp)

jnsL15

subl$1, -8(%ebp)

jmpL16

L15:

subl$1, -8(%ebp)

L16:

cmpl$0, -8(%ebp)

jnsL17

subl$1, -8(%ebp)

jmpL18

L17:

subl$1, -8(%ebp)

L18:

cmpl$0, -8(%ebp)

jnsL19

subl$1, -8(%ebp)

jmpL20

L19:

subl$1, -8(%ebp)

L20:

cmpl$0, -8(%ebp)

jnsL21

subl$1, -8(%ebp)

jmpL2

L21:

subl$1, -8(%ebp)

L2:

movl-4(%ebp), %eax

leal-1(%eax), %edx

movl%edx, -4(%ebp)

testl%eax, %eax

jgL22

movl$0, %eax

leave

c代码2&#xff1a;

int main(){

int n&#61;100000000;

int b&#61;-1;

int a&#61;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&#xff1a;

_main:

LFB0:

pushl%ebp

LCFI0:

movl%esp, %ebp

LCFI1:

subl$16, %esp

movl$100000000, -4(%ebp)

movl$-1, -8(%ebp)

movl$0, -12(%ebp)

jmpL2

L22:

cmpl$0, -8(%ebp)

jleL3

subl$1, -8(%ebp)

jmpL4

L3:

subl$1, -8(%ebp)

L4:

cmpl$0, -8(%ebp)

jleL5

subl$1, -8(%ebp)

jmpL6

L5:

subl$1, -8(%ebp)

L6:

cmpl$0, -8(%ebp)

jleL7

subl$1, -8(%ebp)

jmpL8

L7:

subl$1, -8(%ebp)

L8:

cmpl$0, -8(%ebp)

jleL9

subl$1, -8(%ebp)

jmpL10

L9:

subl$1, -8(%ebp)

L10:

cmpl$0, -8(%ebp)

jleL11

subl$1, -8(%ebp)

jmpL12

L11:

subl$1, -8(%ebp)

L12:

cmpl$0, -8(%ebp)

jleL13

subl$1, -8(%ebp)

jmpL14

L13:

subl$1, -8(%ebp)

L14:

cmpl$0, -8(%ebp)

jleL15

subl$1, -8(%ebp)

jmpL16

L15:

subl$1, -8(%ebp)

L16:

cmpl$0, -8(%ebp)

jleL17

subl$1, -8(%ebp)

jmpL18

L17:

subl$1, -8(%ebp)

L18:

cmpl$0, -8(%ebp)

jleL19

subl$1, -8(%ebp)

jmpL20

L19:

subl$1, -8(%ebp)

L20:

cmpl$0, -8(%ebp)

jleL21

subl$1, -8(%ebp)

jmpL2

L21:

subl$1, -8(%ebp)

L2:

movl-4(%ebp), %eax

leal-1(%eax), %edx

movl%edx, -4(%ebp)

testl%eax, %eax

jgL22

movl$0, %eax

leave执行结果&#xff1a;

0818b9ca8b590ca3270a3433284dd417.png

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



推荐阅读
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • OO第一单元自白:简单多项式导函数的设计与bug分析
    本文介绍了作者在学习OO的第一次作业中所遇到的问题及其解决方案。作者通过建立Multinomial和Monomial两个类来实现多项式和单项式,并通过append方法将单项式组合为多项式,并在此过程中合并同类项。作者还介绍了单项式和多项式的求导方法,并解释了如何利用正则表达式提取各个单项式并进行求导。同时,作者还对自己在输入合法性判断上的不足进行了bug分析,指出了自己在处理指数情况时出现的问题,并总结了被hack的原因。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • c语言基础编写,c语言 基础
    本文目录一览:1、C语言如何编写?2、如何编写 ... [详细]
  • 本文介绍了基于c语言的mcs51单片机定时器计数器的应用教程,包括定时器的设置和计数方法,以及中断函数的使用。同时介绍了定时器应用的举例,包括定时器中断函数的编写和频率值的计算方法。主函数中设置了T0模式和T1计数的初值,并开启了T0和T1的中断,最后启动了CPU中断。 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 第四讲ApacheLAMP服务器基本配置Apache的编译安装从Apache的官方网站下载源码包:http:httpd.apache.orgdownload.cgi今 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • C语言学习笔记—链表(二)链表的静态添加及动态遍历
    链表的静态添加及动态遍历我们知道数组中的数据存储是有序的,而链表中的数据是无序的但是存在某种联系使之组成链表。那么我们如果向一组数据中添加一个数据元素, ... [详细]
  • Linux下C语言的几道经典面试题小结(分享)
    本篇文章整理了几道Linux下C语言的经典面试题,相信对大家更好的理解Linux下的C语言会有很大的帮助,欢迎大家探讨指正。1、如果在Linux下使用GCC ... [详细]
author-avatar
823825lml
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有