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