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

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

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

или

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

2 ответов


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

sizeof(vec);

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

vec.capacity()*sizeof(T)

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

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

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


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

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

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

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