发现位移运算居然并不明显优于乘除运算(10)

  • 主题发起人 主题发起人 青云
  • 开始时间 开始时间

青云

Unregistered / Unconfirmed
GUEST, unregistred user!
记得在学汇编的时候,位移运算只有1个指令周期,而乘除法是100多个指令周期;所以位移运算效率远高于乘除运算;于是我分别对 i:=100000 shr 8; 和 i:=100000 div 256; 各执行10亿次发现时间都在半秒左右。没有明显差别,这太出乎我意料了。以前遇到2的倍数的乘除法,我都用shl,shr代替,原以为能够提高效率的。没想到效果差不多,不知道什么原因,莫非shl,shr本质也是乘除法;明天我尝试插入汇编再测试一次
 
http://bbs.2ccc.com/topic.asp?topicid=348246
 
很好解释,你看一下编译后的指令是不是一样呀!
 
有编译器优化这一说。最好看看汇编代码以确定是不是都优化成移位了。要测这个性能还是手工写汇编代码比较保险。
 
除一个字节内的除数就相当于右移了,编译器直接译为shr
 
可能是i:=100000 div 256的时候,编译器自动优化成位移操作了,或者因为后面没有继续使用i,根本都没计算。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
911
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部