我正在编写一种图形算法,该算法必须非常快。是否有任何编译器标志会为C等有符号整数溢出强制执行未定义的行为?还是任何其他标志迫使更多未定义行为?如果没有,有没有人将速度差作为基准?
答案 0 :(得分:2)
与C相比,Rust中的整数溢出永远不会触发未定义的行为。在调试模式下进行编译时,算术运算会检查是否发生溢出和崩溃,但在发布模式下则不会进行检查。可以通过将标志-C overflow-checks=yes
传递到rustc
来控制行为。
更一般而言,如果性能很重要,则应确保使用发行版。如果您只想定位特定的CPU,则可以使用-C target-cpu=val
,例如-C target-cpu=native
以针对当前CPU进行优化。当然,您需要分析代码以找出最合适的方法。