我只是想声明一个指向由我的项目的多个组件共享的包中的结构的指针,但使用相同的过程。我的意思是目标是只初始化一次。
type Box = [u64; 64];
pub static mut mmaped: &mut Box;
在编译时.
free static item without body
Where mmaped
稍后通过以下方式仅从顶部 crate 分配一次值,并从它所依赖的多个 crate 中使用它的值。
mmaped = unsafe { std::mem::transmute(addr) };
那么我如何提供一个定义mmaped
无需mmap
不止一次吗?
这个问题不是重复的如何创建一个全局的、可变的单例? https://stackoverflow.com/q/27791532,因为它没有谈论将单例导出到板条箱之外,并且我专门为此而收到编译器错误。
Rust 编译器 (2018) 无法从您的代码生成有效的静态项,因为它缺少主体。您正在尝试声明静态变量mmaped
但实际上并没有用任何值初始化它。所有静态变量都必须在编译时用一个值进行初始化。
std::mem::MaybeUninit
似乎是这个用例的完美解决方案。使用“未初始化”值对其进行初始化。稍后用您的实际值更新它。由于它是静态的,因此不允许进一步初始化。
use std::mem::MaybeUninit;
type Box = [u64; 64];
pub static mut mmaped: MaybeUninit<Box> = MaybeUninit::uninit();
// later
unsafe {
mmaped = MaybeUninit::new([0; 64]);
}
只需确保您不访问mmaped
在实际初始化之前。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)