The following program on running with g++ 4.8.2
gave the output 12 on a 32-bit Linux system:
vector<char> v;
cout << sizeof(v) << endl;
I saw this and know that sizeof(v)
could be implementation specific. Still, I was wondering what might be causing that vector to have a size of 12. What I think is that the iterators v.begin()
and v.end()
might be contributing to 8 bytes of the size. Am I correct? If yes, what is contributing to the remaining 4 bytes of size? If not, what are these 12 bytes all about?
Take a look at the sources.
libstdc++
is part of the gcc download.Anyway, the container must have these members:
char*
.size_t
orchar*
.size_t
orchar*
.[[no_unique_address]]
instead).In theory, 2 and 3 might be smaller if not pointers. Though that would be curious, as it would restrict the maximum size.
Also in theory, 2 and 3 could be allocated dynamically with the data. Haven't found anyone actually do that though.
Together 12 bytes, as expected.
Double the sizes for a 64-bit implementation.
Typically std::vector has:
So size 12 is quite justified on a 32 bit machine.
libstdc++'s
std::vector
derived from a base with a data member of this type:_M_end_of_storage
supports.capacity()
/ resizing etc..