`UnsafeCell` 是 Rust 中的编译器优化障碍吗?

Zhi*_* Ma 5 rust

不安全代码指南参考中,它说

Rust 中的所有内部突变都必须发生在 内部UnsafeCell,因此所有具有内部可变性的数据结构都必须(直接或间接)用于UnsafeCell此目的。

另外,在关于 的讨论UnsafeCell中,它说

UnsafeCell基本上是编译器的优化障碍。

确实如此UnsafeCell是 Rust 中的编译器优化障碍吗?如果是,标准库源代码中的哪一行发出了屏障,它是如何工作的?

[更新]

相关问题的答案给出了非常好的解释。TL;DR 版本是:UnsafeCell<T>被标记为#[lang = "unsafe_cell"]强制它在以下情况下保持不变T

现在我认为这与优化没有太大关系,但与寿命分析的相互作用更密切。

对于 Rust 中的方差概念,The Rustonomicon Book给出了详细的解释。

归档时间:

查看次数:

478 次

最近记录:

4 年,11 月 前