gpt4 book ai didi

rust - 重新分配函数体内的静态项

转载 作者:行者123 更新时间:2023-12-04 15:56:27 25 4
gpt4 key购买 nike

假设我们有以下代码:

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 调用时重新分配,还是编译器只是从函数体中删除此分配?因为如果它被重新分配,那么它有点违反规则,非可变静态项是不可变的,因此这些重新分配不应该发生,但这只是我的猜测。

我无法在 Rust 文档中找到对这种情况的明确解释。

最佳答案

如果您查看 generated code ,您将看到 MyStruct 仅创建一次(在编译时),并且该函数仅返回现有实例:

example::get_static_ref:
lea rax, [rip + example::get_static_ref::MY_STRUCT]
ret

example::get_static_ref::MY_STRUCT:
.asciz "\001\000\000\000\000\000\000"

关于rust - 重新分配函数体内的静态项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69565877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com