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

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

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

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


UnsafeCell<T> has the same in-memory representation as its inner type T.


У остальных нет никаких обязательств о memory representation, но они тоже ничего в куче не аллоцируют.
Похожие вопросы