如何关闭整数溢出保护?
How can integer overflow protection be turned off?
我的默认 Rust 启用了整数溢出保护,并且会在溢出时停止执行程序。大量算法需要溢出才能正常运行(SHA1、SHA2 等)
直接使用Wrapping
type, or use the wrapping functions。这些禁用溢出检查。 Wrapping
类型允许您照常使用普通运算符。
此外,当您在 "release" 模式下编译代码时(例如 cargo build --release
),溢出检查将被忽略以提高性能。不要依赖这个,使用上面的类型或函数,这样代码即使在调试版本中也能工作。
绝对是您的情况的正确答案,但是 是 一个编译器选项来禁用溢出检查。我看不出有任何理由使用它,但它存在并且可能为人所知:
#![allow(arithmetic_overflow)]
fn main() {
dbg!(u8::MAX + u8::MAX);
}
通过货运
在您的 profile section 中设置:
[profile.dev]
overflow-checks = false
% cargo run -q
[src/main.rs:6] u8::MAX + u8::MAX = 254
通过rustc
使用-C overflow-checks
命令行选项:
% rustc overflow.rs -C overflow-checks=off
% ./overflow
[overflow.rs:6] u8::MAX + u8::MAX = 254
对于那些来自未来的人,rust 将检查算法溢出,即使你在发布模式.[=15]下编译src =]
➜ ~ cargo new overflow_test --vcs='none'
Created binary (application) `overflow_test` package
➜ ~ cd overflow_test
➜ overflow_test vim src/main.rs
➜ overflow_test cat src/main.rs
fn main() {
let mut max: i32 = i32::MAX;
max += 1;
}
➜ overflow_test cargo run --release
Compiling overflow_test v0.1.0 (/home/steve/overflow_test)
// two warnings are omitted
error: this arithmetic operation will overflow
--> src/main.rs:3:5
|
3 | max += 1;
| ^^^^^^^^ attempt to compute `i32::MAX + 1_i32`, which would overflow
|
= note: `#[deny(arithmetic_overflow)]` on by default
warning: `overflow_test` (bin "overflow_test") generated 2 warnings
error: could not compile `overflow_test` due to previous error; 2 warnings emitted
我的默认 Rust 启用了整数溢出保护,并且会在溢出时停止执行程序。大量算法需要溢出才能正常运行(SHA1、SHA2 等)
直接使用Wrapping
type, or use the wrapping functions。这些禁用溢出检查。 Wrapping
类型允许您照常使用普通运算符。
此外,当您在 "release" 模式下编译代码时(例如 cargo build --release
),溢出检查将被忽略以提高性能。不要依赖这个,使用上面的类型或函数,这样代码即使在调试版本中也能工作。
#![allow(arithmetic_overflow)]
fn main() {
dbg!(u8::MAX + u8::MAX);
}
通过货运
在您的 profile section 中设置:
[profile.dev]
overflow-checks = false
% cargo run -q
[src/main.rs:6] u8::MAX + u8::MAX = 254
通过rustc
使用-C overflow-checks
命令行选项:
% rustc overflow.rs -C overflow-checks=off
% ./overflow
[overflow.rs:6] u8::MAX + u8::MAX = 254
对于那些来自未来的人,rust 将检查算法溢出,即使你在发布模式.[=15]下编译src =]
➜ ~ cargo new overflow_test --vcs='none'
Created binary (application) `overflow_test` package
➜ ~ cd overflow_test
➜ overflow_test vim src/main.rs
➜ overflow_test cat src/main.rs
fn main() {
let mut max: i32 = i32::MAX;
max += 1;
}
➜ overflow_test cargo run --release
Compiling overflow_test v0.1.0 (/home/steve/overflow_test)
// two warnings are omitted
error: this arithmetic operation will overflow
--> src/main.rs:3:5
|
3 | max += 1;
| ^^^^^^^^ attempt to compute `i32::MAX + 1_i32`, which would overflow
|
= note: `#[deny(arithmetic_overflow)]` on by default
warning: `overflow_test` (bin "overflow_test") generated 2 warnings
error: could not compile `overflow_test` due to previous error; 2 warnings emitted