sizeof union 类型

fairchild811 2009-07-29 08:59:17
typedef union {double i; int k[5]; char c;} DATE2;

为什么sizeof(DATE2) 是 24. union的大小也需要用内存对齐来计算吗

24是8的倍数?
...全文
217 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzcmx2008 2009-07-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 billow_zhang 的回复:]
对齐是对应于所有的数据存放的地方.union当然需要对齐,这有什么可怀疑的吗?只不过, union由于多种数据类型占据同样的内存空间,它更要求满足其中所有的大小和对齐的要求.
例如,此例:最大的数据空间是20个字节,但其中有double类型,所以需要按照double类型对齐,对于那些double按8字节对齐的,最小的大小应该是24字节, 对于double按照4字节对齐的,应该就是20个字节.

[/Quote]

ysysbaobei 2009-07-30
  • 打赏
  • 举报
回复
顶下
Cloud__Apex 2009-07-30
  • 打赏
  • 举报
回复
对齐
cmkyec 2009-07-30
  • 打赏
  • 举报
回复
mark
Damn_boy 2009-07-29
  • 打赏
  • 举报
回复
硬件的问题,所以要内存对齐
billow_zhang 2009-07-29
  • 打赏
  • 举报
回复
对齐是对应于所有的数据存放的地方.union当然需要对齐,这有什么可怀疑的吗?只不过, union由于多种数据类型占据同样的内存空间,它更要求满足其中所有的大小和对齐的要求.
例如,此例:最大的数据空间是20个字节,但其中有double类型,所以需要按照double类型对齐,对于那些double按8字节对齐的,最小的大小应该是24字节, 对于double按照4字节对齐的,应该就是20个字节.
wanjingwei 2009-07-29
  • 打赏
  • 举报
回复
mark
pengzhixi 2009-07-29
  • 打赏
  • 举报
回复
按double对齐,并且内存按最大的值int k[5] 5*4=20计算。
superbtl 2009-07-29
  • 打赏
  • 举报
回复
字节最长的对齐 int k[5]; 就是24了
zgjxwl 2009-07-29
  • 打赏
  • 举报
回复
union 也会字长对齐的。
musiclee 2009-07-29
  • 打赏
  • 举报
回复
学习学习
fuzzy_man 2009-07-29
  • 打赏
  • 举报
回复
只可能是字节对齐造成的
应该与结构体一样,与其中的元素的最大单位对齐。即里面有元素是double的话,最后的大小肯定是8的倍数。
liao05050075 2009-07-29
  • 打赏
  • 举报
回复
http://www.51testing.com/?uid-165588-action-viewspace-itemid-76679
xylicon 2009-07-29
  • 打赏
  • 举报
回复
union 和 struct 一样都需要内存对齐吧。
lori227 2009-07-29
  • 打赏
  • 举报
回复
嗯 ~~要内存对齐的~~!

65,184

社区成员

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

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