我知道,加法运算比乘法运算更简单。但是123456 * 3和123456 + 123456 + 123456的执行时间会有什么区别吗
乘法究竟是如何工作的?
乘法算法在不同的编程语言中是否有所不同?
乘法在低级(即汇编器代码)上看起来怎么样?
发布于 2012-09-25 01:09:29
在x86汇编语言中,加法和乘法操作如下所示:
添加operand1、operand2,其中operand1可以是寄存器,操作数2可以是寄存器、常量或存储器地址,根据处理器型号和operand2类型,需要1到7个时钟
MUL操作数;对于无符号乘法,将累加器寄存器(AL、AX、EAX)的内容与操作数相乘,操作数可以是寄存器或存储器地址。同样,根据操作数和处理器型号的类型,它需要12-38个时钟,还有一种MUL版本,它执行带符号乘法。
这是核心汇编语言,没有SSE等现代SIMD扩展。如上所述,真正的速度取决于编译器的优化。
聪明的编译器很可能会将123456 + 123456 + 123456替换为3*123456
发布于 2012-09-25 00:52:14
过早优化是万恶之源:)
你给编译器的不是你在优化步骤后得到的结果,所以虽然理论上加法速度更快,但在现实世界中,你永远不能确定结果会是什么(更不用说当你考虑到SSE或编译器可能使用的其他处理器指令时)。
https://stackoverflow.com/questions/12569367
复制相似问题