Наверное, стоит добавить, что место для количества элементов выделяется с учетом выравнивания структуры.
Т.е., типично добавляется sizeof (unsigned int) (4 байта). Но, если объект объявлен с __declspec(align(16)), или в нем есть SSE-шное поле, то дополнительно выделяется не 4, а 16 байт. При этом количество элементов помещается в начало дополнительного блока (первые четыре байта). (Это для MSVC. Как это сделано в GCC, смотреть еще не доводилось).
sannybuilder.com/forums/viewtopic.php?id=845
Т.е., типично добавляется sizeof (unsigned int) (4 байта). Но, если объект объявлен с __declspec(align(16)), или в нем есть SSE-шное поле, то дополнительно выделяется не 4, а 16 байт. При этом количество элементов помещается в начало дополнительного блока (первые четыре байта). (Это для MSVC. Как это сделано в GCC, смотреть еще не доводилось).