当我在阅读C中的提示时,我在这里看到了这个提示http://www.cprogramming.com/tips/tip/multiply-rather-than-divide 但我不确定.有人告诉我,乘法和除法都比较慢且耗时,需要很多周期.
而且我看到人们经常使用i << 2
而不是i x 4
因为移动速度更快.
这是一个很好的提示使用x0.5 or /2
?或者现代编译器是否以更好的方式优化它?
huy*_*itw 22
确实有些(如果不是大多数)处理器可以比执行除法运算更快地繁殖,但是,它就像是++i
比i++
for循环更快的神话.是的,它曾经是,但现在,编译器足够聪明,可以为您优化所有这些东西,所以你不应该再关心它了.
关于位移,它曾经<< 2
比移动速度快4倍,但是那些日子结束了,因为大多数处理器可以在一个时钟周期内相乘,就像一个移位操作一样.
一个很好的例子是在VGA 320x240
模式下计算像素地址.他们都这样做了:
address = x + (y << 8) + (y << 6)
Run Code Online (Sandbox Code Playgroud)
将y乘以320.在现代处理器上,这可能比仅仅做得更慢:
address = x + y * 320;
Run Code Online (Sandbox Code Playgroud)
所以,只要写下你的想法,编译器将完成其余的工作:)
Dav*_*ave 16
我发现这项服务对于测试这类东西是非常宝贵的:
看看最后的装配.99%的情况下,您将看到编译器无论如何都将它全部优化为相同的代码.不要浪费脑力!
在某些情况下,最好明确地编写它.例如,2^n
(其中n是正整数)可以写为,(int) pow( 2.0, n )
但显然更好1<<n
(并且编译器不会为您进行优化).所以值得把这些东西放在脑海里.与任何事情一样,不要过早优化.
归档时间: |
|
查看次数: |
10073 次 |
最近记录: |