如何关闭整数溢出保护?

Val*_*uca 6 integer overflow rust

我的默认 Rust 启用了整数溢出保护,并且会在溢出时停止正在执行的程序。大量算法需要溢出才能正常运行(SHA1、SHA2 等)

Fra*_*gné 7

使用Wrapping类型,或者直接使用包装函数。这些禁用溢出检查。该Wrapping类型允许您像往常一样使用普通运算符。

此外,当您以“发布”模式(例如 with cargo build --release)编译代码时,会省略溢出检查以提高性能。但是不要依赖于此,请使用上述类型或函数,以便代码即使在调试版本中也能工作。

  • 为了兼容性,请注意一些包装函数直到 1.2.0 才稳定,但包装类型已准备好使用。 (3认同)

She*_*ter 6

弗朗西斯·加涅的回答绝对是您的情况下正确的答案,但有一个编译器选项来禁用溢出检查。我看不出有任何理由使用它,但它确实存在,并且可能还知道:

#![allow(arithmetic_overflow)]

fn main() {
    dbg!(u8::MAX + u8::MAX);
}
Run Code Online (Sandbox Code Playgroud)

通过货物

在您的个人资料部分设置

[profile.dev]
overflow-checks = false
Run Code Online (Sandbox Code Playgroud)
[profile.dev]
overflow-checks = false
Run Code Online (Sandbox Code Playgroud)

通过 rustc

使用-C overflow-checks命令行选项:

% cargo run -q
[src/main.rs:6] u8::MAX + u8::MAX = 254
Run Code Online (Sandbox Code Playgroud)

  • 现在甚至可以在 Cargo 中使用这个标志:`cargo rustc -- -Z force-overflow-checks=no`,即使在稳定版上也是如此。 (2认同)