В C++11, почему int16_t имеет размер 4 при объявлении после float внутри структуры?
У меня есть структура данных, как это:
struct mystruct
{
float f;
int16_t i;
};
sizeof (int16_t) дает 2, но sizeof(mystruct) дает 8 вместо 6. Почему это? Как я могу объявить переменную int16_t 2 байта внутри моей структуры данных?
1 ответ
Это происходит из-за заполнения, учитывая архитектуру вашей системы, компилятор добавляет пространство в структуру.
Если вы попытаетесь добавить еще один int16_t, вы увидите, что размер этой структуры все равно будет 8.
struct mystruct
{
float f;
std::int16_t i;
std::int16_t g;
};
В вашем оригинальном случае
struct mystruct
{
float f;
std::int16_t i;
//2 bytes padding
};
Также обратите внимание, что между элементами в структуре может быть заполнение, поэтому обычно рекомендуется сортировать элементы по уменьшенному размеру заказа, чтобы минимизировать заполнение.
Вы можете быстро прочитать на соответствующей странице википедии, которая хорошо написана. http://en.wikipedia.org/wiki/Data_structure_alignment