社区
C++ 语言
帖子详情
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
打赏
收藏
sizeof union 类型
typedef union {double i; int k[5]; char c;} DATE2; 为什么sizeof(DATE2) 是 24. union的大小也需要用内存对齐来计算吗 24是8的倍数?
复制链接
扫一扫
分享
转发到动态
举报
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
打赏
举报
回复
嗯 ~~要内存对齐的~~!
sizeof
(struct)与
sizeof
(
union
)的区别
sizeof
(struct)与
sizeof
(
union
)的区别1、关于struct与
union
的内存分配方式2、关于struct与
union
的大小计算方式1、关于结构体的大小 1、关于struct与
union
的内存分配方式 (1)、结构体(struct)按照定义时的顺序,为每个成员在内存中依次分配独立空间; (2)、联合(
union
)只按成员中最大的
类型
分配空间,所有成员共享这个内存空间。 如下:...
C语言
union
的
sizeof
,C语言中的
sizeof
(struct )和
sizeof
(
union
)
一般32位机上各数据
类型
所占存储空间为:char : 8位short : 16位int : 32位long : 32位float : 32位double : 64位一、结构体struct1.在没有#pragma pack 宏的情况下:三条原则:(1)数据成员对齐规则:(原则1)结构体struct的数据成员,第一个数据成员放在offset为0的地方,之后每个数据成员的起始位置要从该成员大小的整数倍开...
c/c++中使用
sizeof
计算
union
/struct/class
Union
求
sizeof
union
的结构类似于struct,但是他的存储方式为共享内存存储。即在一时刻只能存储一个数据
类型
。所以在计算
union
时应该计算最大的数据
类型
union
u{ float a; int b[5]; char c; }
sizeof
u;//20 结构体求
sizeof
在默认情况下,为了方便对结构体内元素的访问和管理,当结构体内的
c语言中
sizeof
struct和
sizeof
union
一般32位机子上各个数据
类型
所占的存储空间如下: char:8位 short:16位 int:32位 long:32位 float:32位 double:64位 一、接下来先来看struct,结构体 请牢记以下3条原则:(在没有#pragma pack宏的情况下) 1、数据成员对齐规则:结构体(struct)的数据成员,第一个数据成员放在offset为0的地方,
sizeof
union
struct 内存对齐
sizeof
union
struct 内存对齐 (2010-07-30 23:24:33) 转载 标签: it
union
u { double a; int b; };
union
u2 { char a[13]; int b; };
union
u3 { char a[13]; char b; }; cout...
C++ 语言
65,184
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章