是否有任何编译器标志会强制执行有符号整数溢出的未定义行为?

时间:2019-05-09 05:47:42

标签: rust

我正在编写一种图形算法,该算法必须非常快。是否有任何编译器标志会为C等有符号整数溢出强制执行未定义的行为?还是任何其他标志迫使更多未定义行为?如果没有,有没有人将速度差作为基准?

1 个答案:

答案 0 :(得分:2)

与C相比,Rust中的整数溢出永远不会触发未定义的行为。在调试模式下进行编译时,算术运算会检查是否发生溢出和崩溃,但在发布模式下则不会进行检查。可以通过将标志-C overflow-checks=yes传递到rustc来控制行为。

更一般而言,如果性能很重要,则应确保使用发行版。如果您只想定位特定的CPU,则可以使用-C target-cpu=val,例如-C target-cpu=native以针对当前CPU进行优化。当然,您需要分析代码以找出最合适的方法。