struct对齐疑问

xiaolomg 2014-04-19 01:40:14
在看lua源码时,发现里面在定义object时用了union对齐技巧完成对object的强制对齐。
因此写了测试代码:
#define LUAI_USER_ALIGNMENT_T	union { double u; void *s; long l; }
union aa{ double u;
void *s;
long l; };
struct cc{
double d;
int a;
unsigned int c;
};
struct bb{
LUAI_USER_ALIGNMENT_T dummy;
cc C;
};
int main(){
printf("%d %d\n", sizeof(cc), sizeof(bb));
}

这里LUAI_USER_ALIGNMENT_T是8个字节,因为double最长;这里没有问题;
struct cc是16个字节;也没问题;
但是bb却是24个字节,这里不清楚。按理说,sizeof(cc) = sizeof(dummy)*2,那sizeof(bb)就应该是16个字节;而实际上是24个字节,求教
...全文
69 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaolomg 2014-04-19
  • 打赏
  • 举报
回复
好吧 我sb了,错吧cc 的union写成struct 了,眼睛啊
漂浮一生 2014-04-19
  • 打赏
  • 举报
回复
你的bb是结构体类型啊,
sizeof(bb) = sizeof(cc) + sizeof(LUAI_USER_ALIGNMENT_T) = 16 + 8 = 24
CarlXie 2014-04-19
  • 打赏
  • 举报
回复
数学没有学好吧,8 + 16 = 24不是很简单么 你的cc是struct而不是union

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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