sizeof () std :: vector (C ++) - PullRequest
       12

sizeof () std :: vector (C ++)

11 голосов
/ 08 января 2012

Тема уже есть на эту тему, но у меня все еще есть сомнения. Чтобы рассчитать размер вектора, какой из них правильный:

sizeof(VEC) + sizeof(int) * VEC.capacity()

или

VEC.capacity() * (sizeof(VEC) + sizeof(int))

Ответы [ 2 ]

16 голосов
/ 08 января 2012

Что вы подразумеваете под размером вектора?Размер векторного объекта составляет всего

sizeof(vec);

Если вас интересует, сколько памяти вектор выделил в куче, вы можете использовать

vec.capacity()*sizeof(T)

Итак, если вы добавитеиз них вы получите, сколько памяти вы «потеряли» из-за вектора.

vec.capacity()*sizeof(T) + sizeof(vec)

Обратите внимание, что именно то, сколько памяти выделено, зависит от реализации.Просто приведенная выше формула будет практически правильной (или приблизительно правильной) в большинстве, если не во всех реализациях.

0 голосов
/ 10 марта 2018

Если вы хотите узнать размер данных, содержащихся в векторе

std::vector<int> vec;
...
vec.size() * sizeof(decltype(bufferIn)::value_type))

Если тип изменяется с int на длинное long, больше ничего не нужно менять. Я считаю, что это решение безопаснее, чем решение, использующее тип в sizeof, потому что оно легко может быть изменено без другого.

std::vector<long long> vec; // lets go from int to int64
...
vec.size() * sizeof(int); // woops problem on the horizon
...