当我跑
fn main() {
println!("{:p}", &0);
println!("{:p}", &1);
}
Run Code Online (Sandbox Code Playgroud)
在Rust 游乐场, 我得到了类似的东西
0x560882842004
0x560882842008
Run Code Online (Sandbox Code Playgroud)
暗示0和1被放置在堆上。为什么?
它们没有放在堆上。它们位于已编译二进制文件的静态只读数据段中,并在运行时加载到只读内存中。由于这个原因&T,Rust 源代码中的每个硬编码都有'static生命周期。例子:
fn returns_static_immutable_readonly_num() -> &'static i32 {
&0 // compiles
}
Run Code Online (Sandbox Code Playgroud)