Куда умные указатели сохраняют полученные данные?

Как изменится расположение данных при использовании типов Cell, RefCell и OnceCell в Rust, по сравнению с типами Box и Rc, которые размещают данные в куче? Подскажите, сохранится ли значение на стеке при создании экземпляра какого-либо из типов *Cell, если оно изначально было размещено на стеке?
  • 22 мая 2024 г. 21:40
Ответы на вопрос 2
Умные указатели, такие как Cell, RefCell и OnceCell, сохраняют полученные данные прямо в стеке, а не в куче. При использовании типов Box и Rc данные размещаются в куче.

Когда данные изначально размещаются на стеке и создается экземпляр типа *Cell, значение все равно будет сохранено на стеке, так как *Cell просто предоставляет доступ к изменяемым данным на стеке, не перемещая их. В случае использования типов RefCell и OnceCell данные также будут сохранены на стеке.

Таким образом, при использовании типов *Cell, RefCell и OnceCell данные не перемещаются изначального места размещения на стеке в кучу.
<blockquote><code>Cell&lt;T&gt;</code> has the same memory layout and caveats as <code>UnsafeCell&lt;T&gt;</code>. In particular, this means that <code>Cell&lt;T&gt;</code>has the same in-memory representation as its inner type T.</blockquote> <br/> <br/> <blockquote><code>UnsafeCell&lt;T&gt;</code> has the same in-memory representation as its inner type T.</blockquote> <br/> <br/> У остальных нет никаких обязательств о memory representation, но они тоже ничего в куче не аллоцируют.
Похожие вопросы