union和struct的大小计算

转载 2012年03月27日 16:06:44

声明:整理自网络。


规则:
1,对于union,对齐的大小是最大的基本元素的对齐大小;对象的大小必须是该基本元素大小的整数倍;
2,对于struct,对齐的大小也是最大的基本元素的对齐大小,对象的大小需要考虑元素的对齐,并且需要是最大基本元素的整数倍;同时有#pragma pack修饰的情况,关于struct请详细参考另外一个帖子。
3,这里所说的struct和union的对齐,是指其作为其他复杂对象中的元素的时候要求的对齐,对于本身大小的计算并没有关系。本身的大小只和其所包含的基本元素的对齐有关系。


例子一:
union U1
{
 char a[9]; //对齐大小是1,大小是9个字节
 int b; //对齐大小是4,大小是4个字节
};
所以该union的对齐大小是4个字节;大小为大于等于max(9,4)=9并为4的整数倍,所以是12字节。


例子二:
union U1_Another
{
 char a[9]; //对齐大小是1,大小是9个字节
 double b; //对齐大小是8,大小是8个字节
};
所以该union的对齐大小是8个字节,大小是大于等于9并为8的整数倍,即为16字节;


例子三:
union U2
{
 U1 a; //对齐大小是4个字节,大小是12字节
 double b; //对齐大小是8个字节,大小是8字节
};
所以该union的对齐大小是8个字节,大小是16;


例子四:
struct S1
{
 char a[13]; //对齐大小是1字节,位置是[0,12]
 double c; //对齐大小是8字节,位置是[16,23]
}
所以该结构体是8字节对齐,大小为24个字节;


例子五:
struct S2
{
 S1 a; //对齐大小是8字节,位置是[0,23]
 U1 b; //对齐大小是4字节,位置是[24,35]
};
所以该结构体的对齐大小是8字节,大小是40字节;

怎么计算union和struct中字节数计算

首先我的运行结果都是在64位系统的Xcode中运行的! 然后,这个只是由于对于标准的位移量方法看得头疼,自己总结出来的,如果有错误或者不明欢迎留言! 字节:一般成8位为一个字节,在Xcode中size...
  • willluckysmile
  • willluckysmile
  • 2017年01月02日 17:30
  • 937

[C/C++基础知识] 面试再谈struct和union大小问题

最近找工作参加了很多笔试,其中考察结构体和联合体的大小问题是经常出现的一个问题。虽然题目简单而且分值比较低,但是还是想再给大家回顾下这些C和C++的基础知识。希望文章对你有所帮助~ PS:意外惊喜第三...
  • Eastmount
  • Eastmount
  • 2015年09月23日 03:54
  • 2531

面试再谈struct和union大小问题

最近找工作参加了很多笔试,其中考察结构体和联合体的大小问题是经常出现的一个问题。虽然题目简单而且分值比较低,但是还是想再给大家回顾下这些C和C++的基础知识。希望文章对你有所帮助~         ...
  • ziyouhahaze
  • ziyouhahaze
  • 2015年10月05日 16:18
  • 237

union和struct的大小计算

整理自网络。  规则:1,对于union,对齐的大小是最大的基本元素的对齐大小;对象的大小必须是该基本元素大小的整数倍;2,对于struct,对齐的大小也是最大的基本元素的对齐大小,对象的大小需要考虑...
  • shjuspea
  • shjuspea
  • 2010年12月11日 11:58
  • 418

C++中常见数据类型的sizeof值,以及计算struct和union的详细方法

#include #include #include /*sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。*/ using namespace std; //1...
  • g975291783
  • g975291783
  • 2015年04月21日 20:28
  • 460

C++:Struct 和 Union区别

转自:http://blog.csdn.net/firefly_2002/article/details/7954458一、Struct 和 Union有下列区别1.在存储多个成员信息时,编译器会自动...
  • wangyanguiyiyang
  • wangyanguiyiyang
  • 2016年09月11日 16:35
  • 733

union和struct类型大小的计算

对齐就是要满足存储变量的起始地址与对齐大小余数为0。 对于union,分两步:先算union对齐大小,对齐的大小是取决于union成员中字节对齐最大的那个;再算union实际分配的空间,而分配给...
  • Andy_Leung
  • Andy_Leung
  • 2012年11月01日 17:24
  • 163

union和struct类型的大小计算

原文地址:http://blog.csdn.net/talentluke/article/details/6108557 对齐就是要满足存储变量的起始地址与对齐大小余数为0。 对于unio...
  • w894607785
  • w894607785
  • 2016年02月25日 22:28
  • 221

C语言中,struct与union的区别

struct和union是C语言中两种不同的数据结构,两者都是常见的复合结构,其区别主要表现在两方面: 1、联合体中所有成员共用一块地址空间,即联合体只存放了一个被选中的成员,而结构体中所有成员占用...
  • zhaojian_li
  • zhaojian_li
  • 2015年07月28日 09:29
  • 603

union和struct大小

1、字节对齐的细节和编译器实现相关,但一般而言,如在windows下,就VC而言,满足一下三个准则: 1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除; 2) 结构体每个成员相对于结构...
  • jirryzhang
  • jirryzhang
  • 2018年01月22日 22:31
  • 49
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:union和struct的大小计算
举报原因:
原因补充:

(最多只允许输入30个字)