如何在启用溢出检查的情况下编译和运行优化的Rust程序

如何在启用溢出检查的情况下编译和运行优化的Rust程序,rust,compiler-optimization,integer-overflow,Rust,Compiler Optimization,Integer Overflow,我正在编写一个计算量很大的程序,在调试模式下运行速度慢得令人烦恼 我的程序也受到整数溢出的困扰,因为我正在从u8数组读取数据,并且u8类型通过类型推断扩散到意外的地方,Rust更喜欢溢出,而不是将整数提升到更大的类型 在释放模式下生成将禁用溢出检查: cargo run --release 如何在启用优化和运行时溢出检查的情况下构建Rust可执行文件?您可以在发布模式下编译: 这将-C overflow checks=true传递给编译器。在Rust的早期版本中,溢出检查是调试断言开关的一部分

我正在编写一个计算量很大的程序,在调试模式下运行速度慢得令人烦恼

我的程序也受到整数溢出的困扰,因为我正在从
u8
数组读取数据,并且
u8
类型通过类型推断扩散到意外的地方,Rust更喜欢溢出,而不是将整数提升到更大的类型

在释放模式下生成将禁用溢出检查:

cargo run --release

如何在启用优化和运行时溢出检查的情况下构建Rust可执行文件?

您可以在发布模式下编译:

这将
-C overflow checks=true
传递给编译器。在Rust的早期版本中,
溢出检查
调试断言
开关的一部分,因此在某些情况下可能需要使用它

其他时候,最简单的方法可能是:


注意:若要获得良好的加速,但仍具有有意义的堆栈跟踪,您可能只需要使用
opt level=1
。每个函数体都将得到优化,但是通常没有(或很少)内联。当然它并没有这么快…对于内联,有
#[inline(never)]
#[inline(always)]
(当然,只有当您注意到编译器做得不好时才小心使用,因为过度使用这些属性可能会适得其反)。
[profile.release]
overflow-checks = true
[profile.dev]
opt-level = 3