Если в структуре есть поле Vector, выделяется ли оно в куче?

Предположим, у меня есть структура Train, которая содержит поле с именем passenger_ids, которое само представляет вектор идентификаторов пассажиров.

struct Train {
  passenger_ids: Vector<u32>
}

Будет ли Train выделен в куче, поскольку он содержит поле типа Vector (которое выделено в куче)? Или вместо этого он будет выделен в стеке, а поле укажет на кучу?

Только u32 в векторе обязательно хранятся в куче.

PitaJ 06.02.2023 19:08

Вы пришли из С#? Если это так, то вся концепция «примитивы находятся в стеке, а классы — в куче, структуры могут быть странными» (я знаю, что это широкое обобщение) не работает в Rust.

Kevin Anderson 06.02.2023 19:55

@KevinAnderson Я в основном работаю в NodeJs. Я немного читал о стеке и куче, и мое общее понимание было. «Если он имеет известный размер во время компиляции -> он находится в стеке, а если нет, то в куче». Довольно наивный подход.

kemicofa ghost 07.02.2023 09:07
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
0
3
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Будет ли Train размещаться в куче, поскольку он содержит поле типа Vector (которое размещается в куче)? Или вместо этого он будет выделен в стеке, а поле укажет на кучу?

Нет, поезд не будет выделен в куче, и никакой вектор не будет выделен в куче.

Vec — это обычная структура, содержащая указатель на выделение кучи. Train и Vec, которые он содержит, будут выделены как одна единица, где бы они ни находились (будь то в стеке или в куче, если Box-ed, или где-то еще).

Затем Vec, если и когда к нему будут добавлены элементы, создаст выделение кучи и поместит туда элементы.

Другие вопросы по теме