Какова схема памяти вектора векторов? - PullRequest
0 голосов
/ 02 марта 2019

Я знаю, что некоторая часть вектора (фактические данные) хранится в куче, тогда как некоторые данные (структура, содержащая длину, емкость и указатель на фактические данные в куче) хранятся в стеке.

А как насчет вектора векторов (т.е. элементами вектора являются другие векторы, например вектор строк)?Какие части этого внешнего контейнера хранятся в куче и в вашем стеке?А как насчет отдельных внутренних элементов?

1 Ответ

0 голосов
/ 02 марта 2019

Неверно, что Vec (структура, содержащая указатель, длину и емкость) всегда хранится в стеке.Вы можете переместить любой тип (за исключением самоссылочных, которые нельзя переместить) из стека в кучу, поместив его в Box, Vec или другой интеллектуальный указатель с использованием кучи.Просто рассмотрим простой тип, такой как i64: он может храниться в стеке (или в регистре, если компилятор так выберет), но если вы напишите vec![7i64], у вас будет i64, хранящийся в куче, и единственныйв стеке осталась только Vec (указатель плюс длина и емкость).

При этой аналогии нетрудно понять, что то же самое относится и к String: она может быть в стеке, но вы можете положить его в кучу, создав Vec<String>.Таким образом, если у вас есть Vec<String> длиной 100, существует 101 независимых распределений кучи: одно принадлежит Vec, а другое принадлежит каждому из String s.

См. Также

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...