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