【发布时间】:2011-02-03 08:03:59
【问题描述】:
如何在 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 不对齐该结构?
【问题讨论】:
标签: c gcc memory-alignment