如何关闭整数溢出保护?

问题描述:

我的默认Rust具有整数溢出保护启用,并将停止溢出时执行的程序。大量算法需要溢出才能正常工作(SHA1,SHA2等)如何关闭整数溢出保护?

使用Wrapping类型,或直接使用wrapping functions。这些禁用溢出检查。 Wrapping类型允许您像平常一样使用普通操作符。

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

+3

出于兼容性考虑,观察到一些环绕功能AREN不稳定,直到1.2.0,但包装类型已准备就绪,可供使用。 –

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 
$ 
+1

现在甚至可以在货物上使用这个标志:即使货物稳定,货物锈蚀 - -Z强制溢出检查=否。 –