Можно ли выделить векторы в куче, но получить доступ по ссылке? - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть программа, использующая довольно много места (2,5 МБ), и я храню все это в стеке, используя std :: vector.

  1. Было бы хорошей идеей сохранить это ввместо кучи и
  2. Если это так, то возможно ли использовать функции, которые берут ссылки на вектор и когда сохраненные типы имеют вектор * (как они выделены с новым)?

1 Ответ

3 голосов
/ 03 ноября 2019
  1. В отличие от std::array, std::vector не хранит элементы внутри себя, он всегда выделяет память в куче (если вы не используете пользовательский распределитель). Ваши 2,5 МБ уходят в кучу, и в стеке выделяется только std::vector (пара указателей и размер, как правило, 12/24 байта).

  2. Вы можетесделайте это:

    void foo(std::vector<T>&);
    
    std::vector<T>* vec = ...;
    foo(*vec);
    

Изменить. Я нашел дубликат вопроса . Проголосовал за закрытие.

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