关于字节对齐

cwbcwb505 2010-11-10 11:29:59
typedef union {long i; int k[5]; char c;} DATE;
struct data { int cat; DATE cow; double dog;} too;

请问 sizeof(too) = ?

我最先以为是以结构体内最大的那个类型的整型陪为他的大小的,那么他的大小为应该为40,但是我测试了以后发现不是
请问应该是多少呢?应该是怎么算的呢?
...全文
63 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
luciferisnotsatan 2010-11-10
  • 打赏
  • 举报
回复
不同的设置,会导致结果不一样
不同编译器也会不一样
無_1024 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 csuxiaowu 的回复:]
DATE 为4*5 = 20
too 为4+20+8=32
[/Quote]
是32
分析如上
  • 打赏
  • 举报
回复
1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储。

2:结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储.(struct a里存有struct b,b里有char,int ,double等元素,那b应该从8的整数倍开始存储.)

3:收尾工作:结构体的总大小,也就是sizeof的结果,.必须是其内部最大成员的整数倍.不足的要补齐.

结果是32



  • 打赏
  • 举报
回复
http://blog.csdn.net/hairetz/archive/2009/04/16/4084088.aspx
以前总结过,把那3句话看完,肯定没问题。
shadowlsj 2010-11-10
  • 打赏
  • 举报
回复
先測下你機器中的INT, LONG, DOUBLE是多長吧。

跟機器有關係的。

而且這些變量都是按照default的4字節對齊,也不存在對齊問題。

按照 :long 8, int 4, double: 8 話 32 沒錯啦。
翅膀又硬了 2010-11-10
  • 打赏
  • 举报
回复
36。。。。
Csuxiaowu 2010-11-10
  • 打赏
  • 举报
回复
DATE 为4*5 = 20
too 为4+20+8=32

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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