関数 with_exposed_provenance_mut
Since 1.84.0 (const: 1.91.0) · Sourcepub const fn with_exposed_provenance_mut<T>(addr: usize) -> *mut T説明を展開
アドレスを変換し可変ポインタへと、以前に ‘公開’ されたいずれかの起源を拾って戻す。
これは
addr as *mut Tと完全に等価である。戻されるポインタの起源は以前にそれをexpose_provenanceへ渡すか、ptr as usizeキャストで公開したいずれかのポインタのものである。加えて、Rust の抽象機械の制御外にあるメモリ (例えば MMIO レジスタ) は、そのメモリがスタック、ヒープ、静的変数のような抽象機械により使用されうるメモリから分離されている限り、公開されていると常に考える。どの起源が拾われるかついては仕様化されていない。コンパイラは (それが何かはともかく)「正しい」起源を拾おうと最善をつくすが、現在のところ私達は結果のポインタがどの起源を持つかについていかなる保証も提供できない – そしてそれゆえに戻されるポインタがどのメモリにアクセスするかの確定した仕様は存在しない。
もし戻されるポインタが使用されるのを正当化する手段が以前に ‘公開’ された起源になければ、プログラムは未定義動作となる。特に、エイリアシング規則はまだ有効である: エイリアシングへのアクセスにより無効化されたポインタと参照はたとえそれらが公開されていても、もはや使用できない!
その本質的な曖昧さのため、この操作は Rust のメモリモデルに継続的に準拠するのを補助するツールによりサポートされないかもしれない。可能な限りは
with_addrのような 厳密な起源の API を使用するのが推奨される。殆どのプラットフォームでこれはアドレスと同じバイト列で値を生成する。ポインタに追加情報の保存が必要なプラットフォームでは、戻されるポインタがどの起源を拾うべきかを実際に計算するのが一般に不可能なため、この操作をサポートしないかもしれない。
これは公開された起源の API である。