【发布时间】:2018-11-03 16:29:52
【问题描述】:
根据 Alexandrescu 的文章https://www.facebook.com/notes/facebook-engineering/three-optimization-tips-for-c/10151361643253920/
操作的速度层次是:
- 比较
- (u)int 加、减、bitops、移位
- 浮点加、减(单独的单位!)
- 索引数组访问(警告:缓存效果)
- (u)int32 数
- FP 多重
- FP 除法,余数
- (u)int 除法,余数
我不明白为什么比较这么快。
如何快速比较两个大数?算法是什么?
【问题讨论】:
-
恕我直言,(整数)比较与(整数)减法一样快,因为实际上它是带有丢弃结果的减法 - 除了处理器状态标志 Z、N、V、C。
-
IMHO, (integer) comparsion is as fast as (integer) subtraction because effectively it is subtration你说的是cmp指令,还有另一个指令test,它执行按位与。 -
@ReAl 我也猜到了。另一方面,它是亚历山德雷斯库。 (我的书架上有他的一本书。) ;-) 难道是 discarded result 使比较更快。 (它不需要写回结果。)查看机器命令循环表会有所帮助......
-
cmp本身并不比add快,但是 arith-branch 对(包括add+jz!,而不仅仅是与cmp的组合)的成本与从这个意义上说,单独的分支有时可以“免费”添加cmp