Как я могу явно отключить выравнивание по определенной переменной в gcc?
Взять этот код:
typedef struct{
unsigned long long offset;
unsigned long long size;
unsigned long type;
unsigned long acpi;
}memstruct;
memstruct *memstrx;
Это определит структуру размером 24 байта.
Я попытался сделать:
memstrx=(void*)(0x502);
То есть
&memstrx[0]
должно иметь значение 0x502
&memstrx[1]
, 0x51A
&memstrx[2]
, 0x532
...и т. д. и т. п.
Но, похоже, все не так.
Вместо этого
&memstrx[1]
отображает адрес 0x522
&memstrx[2]
, 0x542
&memstrx[3]
, 0x552
... и т. Д. И т. П.
Я подозреваю, что GCC неявно изменил размер структуры до 32байты (от 24 байтов), форсируя (64-битное выравнивание каждой записи).И я действительно не хочу такого поведения только для этой структуры.Как я должен сказать GCC не выравнивать эту структуру?