【发布时间】:2021-10-14 06:16:24
【问题描述】:
假设我们有以下代码:
fn main() {
for _ in 0..10 {
let _ = get_static_ref();
}
}
struct SomeStruct {
value: usize
}
fn get_static_ref() -> &'static SomeStruct {
static MY_STRUCT: SomeStruct = SomeStruct { value: 1 };
&MY_STRUCT
}
MY_STRUCT 是否会在每次 get_static_ref 调用时重新分配,还是编译器只是从函数体中删除此分配?
因为如果它被重新分配,那么它有点违反规则,非 mut 静态项是不可变的,因此这些重新分配不应该发生,但这只是我的猜测。
我无法在 Rust 文档中找到对这种情况的明确解释。
【问题讨论】:
-
不分配一次,您可以通过此代码测试行为:play.rust-lang.org/…
-
一种思考方式是
get_static_ref()中的=标记不表示assignment,而是initialization。由于MY_STRUCT是静态的,所以初始化只执行一次。 -
哦,如果你这样想,现在就有意义了,谢谢:)