В 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

Другие вопросы по тегам