做指针算术是否会产生除法成本

时间:2011-11-03 21:28:12

标签: c

我正在研究嵌入式处理器,其中划分的成本很高。在汇编器输出中跟踪除法调用时,我很惊讶地看到指针算法生成对除法函数的调用。

我无法看到编译器如何能够避免这种分歧,除非结构的大小是2的幂。任何人都知道像gcc这样聪明的编译器是否设法以某种方式避免这种情况?

2 个答案:

答案 0 :(得分:0)

通过常数除法通常可以优化为宽乘法,然后是移位。对于你来说,这可能仍然太慢,我不知道。但这只发生在指针减法中,这可能是可以避免的,这取决于你如何使用它。

答案 1 :(得分:0)

在某些处理器上,当启用完全优化时,编译器可以进行强度降低以将除数转换为乘法。因此,例如,除了除以10,它们将乘以3435973837并取高32位,相当于乘以0.8,然后使用移位除以8。