Предположим, что у меня есть такая структура:
struct MyStruct
{
uint8_t var0;
uint32_t var1;
uint8_t var2;
uint8_t var3;
uint8_t var4;
};
Это, возможно, собирается растратить кучу (ну не тонну) пространства. Это связано с необходимостью выравнивания переменной uint32_t
.
В действительности (после выравнивания структуры, чтобы она могла фактически использовать переменную uint32_t
), она может выглядеть примерно так:
struct MyStruct
{
uint8_t var0;
uint8_t unused[3]; //3 bytes of wasted space
uint32_t var1;
uint8_t var2;
uint8_t var3;
uint8_t var4;
};
Более эффективной структурой будет:
struct MyStruct
{
uint8_t var0;
uint8_t var2;
uint8_t var3;
uint8_t var4;
uint32_t var1;
};
Теперь вопрос:
Почему компилятор запрещен (стандартным) от переупорядочения структуры?
Я не вижу, чтобы вы могли стрелять себе в ногу, если структура была переупорядочена.