关于结构体中字节对齐问题

shawnccm 2006-04-18 04:32:03
以前觉得自己对这个问题已经了解了,今天突然做了个实验,发现。。。。。还迷糊 -_-@
麻烦各位讲解下,谢谢

typedef Data
{
char c;
double a;
}x;

typedef Data
{
double a;
char c;
}y;

printf("%d", sizeof(x)); //32位系统输出为16
ptintf("%d", sizeof(y)); //结果同上。。

这样2个结构体,按照我原来的理解,输出的结果应该是不一致的
第一个因为结构体中先定义的char型,为了字节对齐,要补上7个字节,这个好理解。。
但第二个为什么输出也要补啊。。。。
...全文
155 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shawnccm 2006-04-18
  • 打赏
  • 举报
回复
谢谢yuanchuang的解答,已基本明白,正在看duduhaha给的文章,很不错。。可以结贴了~~:)
yuanchuang 2006-04-18
  • 打赏
  • 举报
回复
对齐要看本身需要多大,然后在其整数倍字节数的地方开始分配内存。

最后补齐到最大需求的整数倍。这个,应该有这方面的文章吧。
我是在inside The C++ Object Model上看到的。

还有我是来混分的,懂了快揭帖,谢谢
duduhaha 2006-04-18
  • 打赏
  • 举报
回复
网上搜索<<sizeof终极无惑>>
yuanchuang 2006-04-18
  • 打赏
  • 举报
回复
typedef Data
{
double a;
char c;
int i;
}x;
这个可能会让你郁闷,他的大小应也该是16(我没有测试,但你不相信可以试试,看我说得对不对)
yuanchuang 2006-04-18
  • 打赏
  • 举报
回复
其实还有一条规则你不知道!
那就是整个结构的大小必须是对其字节数的整数倍!
CandCplus 2006-04-18
  • 打赏
  • 举报
回复
遇到过类似问题,关注

69,369

社区成员

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

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