Как изменится расположение данных при использовании типов Cell, RefCell и OnceCell в Rust, по сравнению с типами Box и Rc, которые размещают данные в куче? Подскажите, сохранится ли значение на стеке при создании экземпляра какого-либо из типов *Cell, если оно изначально было размещено на стеке?
Умные указатели, такие как Cell, RefCell и OnceCell, сохраняют полученные данные прямо в стеке, а не в куче. При использовании типов Box и Rc данные размещаются в куче. Когда данные изначально размещаются на стеке и создается экземпляр типа *Cell, значение все равно будет сохранено на стеке, так как *Cell просто предоставляет доступ к изменяемым данным на стеке, не перемещая их. В случае использования типов RefCell и OnceCell данные также будут сохранены на стеке. Таким образом, при использовании типов *Cell, RefCell и OnceCell данные не перемещаются изначального места размещения на стеке в кучу.
Cell<T>
has the same memory layout and caveats asUnsafeCell<T>
. In particular, this means thatCell<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, но они тоже ничего в куче не аллоцируют.