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字节;

struct和union大小的计算方法

结构体中的成员可以是不同的数据类型,成员按照定义时的顺序依次存储在连续的内存空间。和数组不一样的是,结构体的大小不是所有成员大小简单的相加,需要考虑到系统在存储结构体变量时的地址对齐问题。看下面这样的...

union和struct类型的大小计算

union和struct类型的大小计算: 对于union,对齐的大小是最大的基本元素的对齐大小,对象的大小必须是该基本元素大小的整数倍。 如: Union U1 { Char a[9];...
  • zju_xjn
  • zju_xjn
  • 2012年10月14日 19:55
  • 103

struct和union计算方法

  • 2015年07月22日 14:53
  • 1KB
  • 下载

struct与union内存大小浅析

写起这篇文章的原因呢?是因为在看面试题突然遇到,然后与人讨论,亲自测试发现很多的问题,所以,想来总结以下. 首先把面试题奉上(不论题,只论知识): typedef union { long i;int...

爬楼梯 struct union内存分配 大小端判断

#include #include int step(int n){ if(1==n) return 1; else if(2==n) return 2; else if(3==n) ...

从struct和union的区别中隐身对 大小端存储格式的理解

共用体 构造数据类型,也叫联合体 用途:使几个不同类型的变量共占一段内存(相互覆盖) 结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体-------自定义数据类型 -----------...

大小端区别、Union和Struct的内存大小

转自:http://hi.baidu.com/xiaomeng008/blog/item/9495ad96ce186b7f54fb96d7.html 嵌入式系统开发者应该对Little-endian...

union和struct类型大小的跨平台讨论

这个问题的教材网上很多,我就不多说了这里给出一个:点击打开链接 这个问题又最容易引起争执,为什么呢?与平台或者说与编译器有关系,先看看下面的代码: #include using namespace...

Windows下struct和union字节对齐设置以及大小的确定(一 简介和结构体大小的确定)

在windows下设置字节对齐大小的方式,目前我了解有三种: 1.

struct和union在内存中占用空间大小的计算

在32位和64位linux系统下的struct,union占用内存空间大小的计算
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:union和struct的大小计算
举报原因:
原因补充:

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