问题描述
当我跑步时
fn main() {
println!("{:p}",&0);
println!("{:p}",&1);
}
在Rust playground 我得到类似的东西
0x560882842004
0x560882842008
暗示 0
和 1
被放置在堆上。为什么?
解决方法
它们没有放在堆上。它们位于已编译二进制文件的静态只读数据段中,并在运行时加载到只读内存中。因此,Rust 源代码中的每个硬编码 &T
都有一个 'static
生命周期。示例:
fn returns_static_immutable_readonly_num() -> &'static i32 {
&0 // compiles
}