请教紧凑编译问题

qq_26368067 2015-03-06 08:07:25
最近在使用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);
}





...全文
848 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhxianbin 2015-03-07
  • 打赏
  • 举报
回复
非对齐访问会影响效率,把数据结构修改下,人工对齐 试试
iasky 2015-03-07
  • 打赏
  • 举报
回复
感觉最重要的还是设计好自己的数据结果,自然就是对齐的。

1,025

社区成员

发帖
与我相关
我的任务
社区描述
Linux /Unix kernel支持不同的硬件体系,X86, ARM, MIPS, 等等
社区管理员
  • CPU和硬件区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧