不会真有人觉得x+=1, x++比x=x+1效率高吧?

为什么会写这篇文章

看到这篇文章 鱼C缸-哪个效率更高?x=x+1, x+=1, x++不禁停下来思考了一下,博主这篇文章的分析是不是太草率了?博主从高级语言角度去分析,而脱离具体的底层似乎不可取。既然如此,我们结合底层汇编代码来实践一下。

上结论:对于C/C++语言,截至到目前,主流编译器编译出来的代码效率是一样的;对于Java语言,使用JDK编译出来的Java字节码似乎x++效率最高,但是Java字节码不直接对应底层硬件的机器码,而是由Java虚拟机在运行时解释或编译成特定硬件架构的机器码。因此,无法直接将Java字节码直接对应机器码,需要考虑特定的JVM实现。所以Java语言需要自行实践一下。

推荐的反汇编工具和博客

可执行:戳这里
可读:生成反汇编参考戳这里

C语言-mips64 gcc 13.2.0

不论是x = x + 1、x+=1还是x++生成的汇编代码是一样的,所以机器在执行时效率也是一样的。这里选用的架构和编译器是mips64和gcc;感兴趣的小伙伴也可以试一试其他的架构和编译器,这里我自己用x86的架构得到的汇编代码也是一样的。得到的汇编结果见下图:

x = x + 1

在这里插入图片描述

x += 1

在这里插入图片描述

x++

在这里插入图片描述

Java语言-jdk 21.0.0

注意jdk并不是将Java语言转换成汇编语言,而是Java字节码。Java字节码是Java源代码经过编译后生成的中间代码,它是一种面向Java虚拟机(JVM)的指令集。Java字节码不直接对应底层硬件的机器码,而是由Java虚拟机在运行时解释或编译成特定硬件架构的机器码。因此,无法直接将Java字节码转换为特定硬件的机器码,除非考虑特定的JVM实现。
这里只给大家展示了Java语言“x=x+1, x+=1, x++”的Java字节码,未真正运行实践,感兴趣的读者可以自行上机实践。

x = x + 1

在这里插入图片描述

x += 1

在这里插入图片描述

x++

在这里插入图片描述

可以看到jdk生成的字节码,x+=1和x++最简洁,仅有一条字节码;而x=x+1生成了三条java字节码。似乎iinc指令不用取指令和存指令。不过最终代码的运行效率怎样还得真正上机实践,从Java字节码来看似乎x+=1和x++效率最高。

最后

对于C/C++语言,截至到目前,同一个主流编译器编译出来的汇编代码是一样的,所以x=x+1, x+=1, x++代码效率是一样的;
对于Java语言,虽然jdk对代码x=x+1, x+=1, x++编译出来的java字节码存在差异,但是是否真正运行时有差异还得上机实验一下。

最近还得赶论文,先写在这里叭,感兴趣的小伙伴可以上机实践验证一下,后面有时间再来更新补充。

感谢孙师姐推荐的反汇编工具和博客,师姐真的很漂亮。

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值