我不确定它是正常的还是编译器错误,但我有一个包含很多成员的 C 结构。其中,有:
struct list {
...
...
const unsigned char nop=0x90; // 27 bytes since the begining of the structure
const unsigned char jump=0xeb; // 28 bytes since the begining of the structure
const unsigned char hlt=0xf4; // 29 bytes since the begining of the structure
unsigned __int128 i=0xeb90eb90eb90eb90f4f4 // should start at the 30th byte, but get aligned on a 16 byte boundary and starts on the 32th byte instead
const unsigned char data=0x66; // should start at the 46th byte, but start on the 48th instead.
}; // end of struct list.
我很难找出为什么我的程序不工作,但我终于发现两者之间有 2 个字节的间隙hlt
,i
它被设置为 0x0。这意味着i
正在对齐。
当我 printf 结构的那部分时,这一点非常清楚,因为使用:
for(int i=28;i<35;i++)
printf("%02hhX",buf[i]);
我EBF40000EB90EB90
在屏幕上。
我volatile struct list data;
在我的程序中尝试了类似的东西,但它并没有改变对齐问题。
那么是否有 a#pragma
或 a__attribute__
告诉 gcc 不对齐i
内部struct list
类型?