There is a topic already on this topic but I have doubts still. To calculate the size of a vector, which one is correct:
sizeof(VEC) + sizeof(int) * VEC.capacity()
or
VEC.capacity() * (sizeof(VEC) + sizeof(int))
There is a topic already on this topic but I have doubts still. To calculate the size of a vector, which one is correct:
sizeof(VEC) + sizeof(int) * VEC.capacity()
or
VEC.capacity() * (sizeof(VEC) + sizeof(int))
What do you mean by size of the vector? The size of the vector object is just
sizeof(vec);
If you are interested in how much memory the vector has allocated on the heap, you can use
vec.capacity()*sizeof(T)
So, if you add these, you'll get how much memory you've "lost" because of the vector.
vec.capacity()*sizeof(T) + sizeof(vec)
Please note that exactly how much memory is allocated is implementation-dependent. It's just that the formula above will be practically correct (or approximately correct) on most if not all implementations.
If you want to know the size of the data contained within the vector
std::vector<int> vec;
...
vec.size() * sizeof(decltype(bufferIn)::value_type))
If the type is changed from int to say long long nothing else has to be changed. I find this solution safer then the one using the type in the sizeof because it one can easily be changed without the other.
std::vector<long long> vec; // lets go from int to int64
...
vec.size() * sizeof(int); // woops problem on the horizon