Function std::ptr::from_exposed_addr
source · pub fn from_exposed_addr<T>(addr: usize) -> *const T
🔬This is a nightly-only experimental API. (
strict_provenance
#95228)Expand description
将地址转换回指针,获取以前的 ‘exposed’ 出处。
这相当于 addr as *const T
。返回指针的出处是先前通过将其传递给 expose_addr
或 ptr as usize
强制转换而暴露的 any 指针的出处。
此外,不受 Rust 抽象机控制的内存 (例如 MMIO 寄存器) 总是被认为是暴露的,只要该内存与抽象机将使用的内存 (例如栈) 不相交,堆和静态。
如果没有 ‘exposed’ 出处证明该指针的使用方式是正确的,则程序具有未定义的行为。 特别是,别名规则仍然适用: 由于别名访问而失效的指针和引用不能再使用,即使它们已经暴露!
请注意,没有算法可以决定使用哪个出处。 您可以将此视为 “guessing” 正确的出处,并且猜测将是 “maximally in your favor”,因为如果有任何方法可以避免未定义的行为 (同时支持所有别名要求),那么这就是将要进行的猜测。
在具有多个地址空间的平台上,您有责任确保该地址在该指针将使用的地址空间中有意义。
使用这种方法意味着代码没有遵循严格的出处规则。
“Guessing” 合适的出处使规范和推理复杂化,并且可能不受帮助您与 Rust 内存模型保持一致的工具的支持,因此建议尽可能使用 with_addr
。
在大多数平台上,这将产生一个与地址具有相同字节的值。 需要在指针中存储附加信息的平台可能不支持此操作,因为通常不可能实际计算返回的指针必须拾取哪个出处。
此 API 及其声明的语义是 Strict Provenance 实验的一部分,有关详细信息,请参见 模块文档。