在发布模式下编译时,为什么Godbolt编译器浏览器不显示我的函数的任何输出?

Luk*_*odt 11 rust

我想使用https://rust.godbolt.org查看此函数的程序集输出:

fn add(a: u8, b: u8) -> u8 {
    a + b
}
Run Code Online (Sandbox Code Playgroud)

在网站上粘贴这个工作正常,但显示了很多组装.鉴于rustc默认情况下在调试模式下编译我的代码,这并不奇怪.当我通过传递-O给编译器在发布模式下编译时,根本没有输出!

我究竟做错了什么?为什么Rust编译器会在发布模式下删除所有内容?

Luk*_*odt 18

Godbolt通过传递--crate-type=lib给编译器将您的Rust代码编译为库包.来自库的代码只有在公开的情况下才有用.因此,在您的情况下,您的add()函数是私有的,并且完全从编译器中删除.解决方案很简单:

通过添加功能使您的功能公开pub.现在编译器不会删除该函数,因为它是库的公共接口的一部分.

  • 有时向函数添加 pub 是不够的,特别是对于小型包装函数。您应该将“#[inline(never)]”添加到您想要查看反汇编的顶级函数。 (2认同)