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
... などになります。
しかし、物事は正しくないようです。
代わりに、は 0x522 、 0x542 、 0x552
&memstrx[1]
のアドレスを表示します
&memstrx[2]
&memstrx[3]
...などなど。
GCC が暗黙のうちに構造体のサイズを (24 バイトから) 32 バイトに変更し、(各エントリの 64 ビット アラインメント) を強制したのではないかと思います。そして、この構造だけでこの動作が必要なわけではありません。その構造を整列させないようにGCCにどのように指示すればよいですか?