While the public interface of std::vector
is defined by the standard, there can be different implementations: in other words, what’s under the hood of std::vector
can change from implementation to implementation.
Even in the same implementation (for example: the STL implementation that comes with a given version of Visual C++), the internals of std::vector
can change from release builds and debug builds.
The 24 size you see can be explained as 3 pointers (each pointer is 8 bytes in size on 64-bit architectures; so you have 3 x 8 = 24 bytes). These pointers can be:
- begin of vector
- end of vector
- end of reserved memory for vector (i.e. vector’s capacity)