Performance 将所有内容都放在main中是否存在性能劣势?
在《铁锈》中,你似乎基本上可以把任何东西放在主容器中。特性、实现块、函数、静态变量 例如,这将编译:Performance 将所有内容都放在main中是否存在性能劣势?,performance,optimization,rust,main,Performance,Optimization,Rust,Main,在《铁锈》中,你似乎基本上可以把任何东西放在主容器中。特性、实现块、函数、静态变量 例如,这将编译: fn main() { trait Foo { fn foo(); } impl Foo for f64 { fn foo() {} } struct MyStruct; enum RustIsCool { MyStruct, }; fn bar() { tra
fn main() {
trait Foo {
fn foo();
}
impl Foo for f64 {
fn foo() {}
}
struct MyStruct;
enum RustIsCool {
MyStruct,
};
fn bar() {
trait Baz {
fn baz();
}
impl Baz for f64 {
fn baz() {}
}
}
static x: f64 = 10.0;
println!("This compiles!");
}
正如你所看到的,你甚至可以把这些东西嵌套在其他的块中
显然,从文体的角度来看,这样做是不好的;它很难看,很难重构,并且使代码重用更加困难
但我很好奇:这样做会带来性能开销吗?或者Rust编译器会优化任何差异吗?简短回答:没有显著差异 如果您查看LLVM-IR并将其与进行比较,您将看到在“调试”模式下没有差异(由于命名的原因除外)。在“释放”模式下,根本没有任何区别 但是,测试代码的位置当然可能会影响代码生成。但这些都是次要影响。没有任何基本要素会影响代码生成(例如,
main
中的定义会隐式引用main
的变量)
可能影响代码生成的一些原因:
- 由于
中的定义不能在main()
之外使用,因此这可能是对这些内容的内联函数调用的强烈提示,并在可能的情况下删除原始定义。这通常会提高性能main()
生成的LLVM-IR略有不同,因此理论上LLVM可以生成不同的代码(蝴蝶效应)rustc