我正在研究嵌入式处理器,其中划分的成本很高。在汇编器输出中跟踪除法调用时,我很惊讶地看到指针算法生成对除法函数的调用。
我无法看到编译器如何能够避免这种分歧,除非结构的大小是2的幂。任何人都知道像gcc这样聪明的编译器是否设法以某种方式避免这种情况?
答案 0 :(得分:0)
通过常数除法通常可以优化为宽乘法,然后是移位。对于你来说,这可能仍然太慢,我不知道。但这只发生在指针减法中,这可能是可以避免的,这取决于你如何使用它。
答案 1 :(得分:0)
在某些处理器上,当启用完全优化时,编译器可以进行强度降低以将除数转换为乘法。因此,例如,除了除以10,它们将乘以3435973837并取高32位,相当于乘以0.8,然后使用移位除以8。