Учитывая, что накладные расходы памяти имеют решающее значение для моего приложения, я думаю, что из двух вариантов выше, последний был бы более легким. Я прав? Я основываю это на том факте, что у вектора есть память из 4 указателей для отслеживания begin()
, end()
, size()
и распределителя. Таким образом, общий размер для всей модели будет в порядкеstd :: vector <std :: vector <T>> vs std :: vector <T*>
(4*sizeof(T*) + sizeof(T)*Ni)*No + 3*sizeof(std::vector<T>*)
Здесь я предполагаю, Ni
, No
быть число элементов во внутренних и внешних векторов, resply. Используя последнее выражение, я надеюсь сохранить 4*sizeof(T*)*No
, поскольку в моем приложении No
является огромным, а Ni <<<< No
. Чтобы исправить идеи, No
находится в заказе 100
миллионов и более, Ni
обычно находится в заказе 3
до 50
.
Заранее благодарим за ваши интересы и любые идеи.
ПРИМЕЧАНИЕ: Я понимаю и более чем счастлив заплатить цену за сделку с указателем вкл. распределяя, перемещая и освобождая его, и я могу сделать это без каких-либо существенных издержек производительности.
Один из 'начать() ',' end() 'и' size() 'избыточно. «вектор» не так уж плох. –
Если вы выделяете большое количество элементов, 'std :: vector', скорее всего, будет иметь проблему, поскольку для этого требуется непрерывное выделение памяти. 'std :: deque' может помочь в этом, в зависимости от ваших потребностей. –
«В моем приложении« Нет »огромно, а' Ni' <<<< 'No'." Одним из очевидных решений было бы переключение индексов внутреннего и внешнего векторов, если вам не нужно проходить вокруг внутреннего вектора. – dasblinkenlight