Предположим, у меня есть структура Train
, которая содержит поле с именем passenger_ids
, которое само представляет вектор идентификаторов пассажиров.
struct Train {
passenger_ids: Vector<u32>
}
Будет ли Train
выделен в куче, поскольку он содержит поле типа Vector (которое выделено в куче)? Или вместо этого он будет выделен в стеке, а поле укажет на кучу?
Вы пришли из С#? Если это так, то вся концепция «примитивы находятся в стеке, а классы — в куче, структуры могут быть странными» (я знаю, что это широкое обобщение) не работает в Rust.
@KevinAnderson Я в основном работаю в NodeJs. Я немного читал о стеке и куче, и мое общее понимание было. «Если он имеет известный размер во время компиляции -> он находится в стеке, а если нет, то в куче». Довольно наивный подход.
Будет ли Train размещаться в куче, поскольку он содержит поле типа Vector (которое размещается в куче)? Или вместо этого он будет выделен в стеке, а поле укажет на кучу?
Нет, поезд не будет выделен в куче, и никакой вектор не будет выделен в куче.
Vec
— это обычная структура, содержащая указатель на выделение кучи. Train
и Vec
, которые он содержит, будут выделены как одна единица, где бы они ни находились (будь то в стеке или в куче, если Box
-ed, или где-то еще).
Затем Vec
, если и когда к нему будут добавлены элементы, создаст выделение кучи и поместит туда элементы.
Только
u32
в векторе обязательно хранятся в куче.