请教紧凑编译问题
最近在使用gcc编译powerpc平台的代码时遇到了问题。
针对附件的代码使用gcc进行编译。如果不使用-mstrict-align选项,则会产生浮点指令(lfd stfd)来读取结构体成员。
由于代码使用了#pragma pack指定了数据结构的紧凑排列,因此成员的地址是不对齐的。
这种情况下,在运行时浮点指令会导致处理器对齐异常(powerpc 0x600异常)。
如果使用 -mstrict-align选项则会编译出多达十几条单字节指令(lbz stb)来完成数据读写,性能极低。
这是否说明gcc在处理 #pragma pack的时候存在bug?有没有改进的可能?如果能改进,影响范围大吗?
#pragma pack(1)
tyoedef struct
{
unsigned int d1;
unsigned int d2:8;
unsigned int d3:8;
unsigned int d4:8;
unsigned int d5:8;
}AAA;
typedef struct
{
char b;
AAA c;
}BBB;
#pragma pack()
BBB data;
void func11(AAA data)
{return;}
viod test(void)
{
func11(data.c);
}