Я пытаюсь понять, как пространственная сложность std :: vector развивается после вызова функции Reserve ().
Вот код:
vector<SparseData<T_Indices, T_Values>> v1 = vector<SparseData<T_Indices, T_Values>>();
v1.reserve(341);
vector<SparseData<T_Indices, T_Values>> v2 = vector<SparseData<T_Indices, T_Values>>();
v2.reserve(342);
С SparseData
содержит 3 целых числа (4 байта каждое).
v1 стоимость - теоретическая стоимость O(v1) = 341*3*4 = 4092 Bytes
.Отлично.
Моя проблема - стоимость v2.Я ожидал O(v2) = 342*3*4 = 4104 Bytes
, но фактическая стоимость 4151 Bytes
.Существует дельта 47 Bytes
, которую я не могу понять.
Я измеряю пространство с помощью средств диагностики сообщества Visual Studio 2017 (куча моментальных снимков), которые, я считаю, являются надежными.
Чтосмысл этих 47 Bytes
?Что они, возможно, представляют?
Заранее спасибо.
Редактировать: Я отредактировал первоначальный пост, чтобы имена классов соответствовали скриншотам.Ниже приведены измеренные значения для v1 (соответственно v2) после вызова резерва (341) (соответственно резерва (342)).Обратите внимание, что два элемента не имеют одинаковые «значения», чем другие.Кроме того, v2 содержит 345 SparseData
элементов, давая объяснение для первого 4140 Bytes
: отлично, это или больше часть из документации :
Если n больше текущей векторной емкости, функция заставляет контейнер перераспределять свое хранилище, увеличивая его емкость до n (или больше).
По-прежнему ищем 11 Bytes
delta tho.