知识卡片
一行除法可能很慢
内容
加减和移位通常便宜,除法、取模和浮点可能调用大库或消耗大量周期。发散:源码里的一个运算符不代表机器上一个便宜动作,优化要站在处理器指令成本上看代码。
参考来源
- 位置:《嵌入式系统设计与实践》第9章《数学运算》"9.1 区别快、慢运算"一节(源文件:_epub-src/OEBPS/text00126.html)
- 结论依据:原文明确"加、减运算和移位运算比较快。除法运算很慢。任何浮点运算都慢得要死,除非你有浮点运算单元(FPU)",并以取模运算为例说明"对10取模(%10)实际上是个隐藏的除法,是一个相对高成本的指令",警示"对于许多处理器,除法是……调用一个库函数……通常是个相当大的函数"。
- 原始内容:加、减运算和移位运算比较快。除法运算很慢。任何浮点运算都慢得要死,除非你有浮点运算单元(FPU)……对于许多处理器,与其他算术运算不一样,除法是在硬件中实现的。在这些处理器上,除法运算调用一个库函数……只是因为一个运算能用一行代码来描述,并不意味着它在处理器上运行时需要的时间短。