如何关闭整数溢出保护?

时间:2015-07-03 23:06:14

标签: integer overflow rust

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

2 个答案:

答案 0 :(得分:4)

使用Wrapping类型,或直接使用wrapping functions。这些禁用溢出检查。 Wrapping类型允许您照常使用普通运算符。

此外,当您在"发布"中编译代码时模式(例如cargo build --release),省略溢出检查以提高性能。不要依赖于此,使用上面的类型或函数,以便代码甚至可以在调试版本中工作。

答案 1 :(得分:1)

Francis Gagné's answer绝对是您案件的正确答案。但是,我会说有一个编译器选项来禁用溢出检查。我没有看到任何理由使用它,但它存在并且可能也是如此:

use std::u8;

fn main() {
    u8::MAX + u8::MAX;
}

编译并运行:

$ rustc overflow.rs
$ ./overflow
thread '<main>' panicked at 'arithmetic operation overflowed', overflow.rs:4

$ rustc -Z force-overflow-checks=no overflow.rs
$ ./overflow
$