struct/class/union内存对齐原则

原创 2011年01月14日 20:01:00

 

struct/class以及union内存对齐四个原则:

1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节, 则要从4的整数倍地址开始存储),基本类型不包括struct/class/uinon。

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

3、收尾工作:结构体的总大小,也就是sizeof的结果,.必须是其内部最大成员的"最宽基本类型成员"的整数倍.不足的要补齐.(基本类型不包括struct/class/uinon)。

4、sizeof(union),以结构里面size最大元素为union的size,因为在某一时刻,union只有一个成员真正存储于该地址。

 

 

测试用例:

 

总结:

       从“struct/class以及union内存对齐原则”可以得出:在struct/class/union中定义变量时,长度小的变量先定义,长度大的变量后定义,可以节省内存。

 

参考:1.http://blog.csdn.net/hairetz/archive/2009/04/16/4084088.aspx

         2.http://blog.csdn.net/yuesheng3707/archive/2009/10/23/4715721.aspx

【C++ Primer】 神秘的 sizeof(union) 、sizeof(struct) 和内存对齐技术

一,union:C/C++关键字  共用体(联合)        共用体的声明和共用体变量定义与结构十分相似。形式为:   union 共用体名 {    数据类型 成员名;    数据类型...
  • tianshuai11
  • tianshuai11
  • 2012年05月17日 15:30
  • 7498

union 类型 内存对齐

如下代码结果为什么是24?union DATE { char a; int i[5]; double b; }; DATE max; cout这个问题很好...
  • musiccow
  • musiccow
  • 2010年08月17日 10:06
  • 3045

C++类中的内存对齐

对齐规则在没有#pragma pack宏的情况下:  1.数据成员对齐规则:struct, union的数据成员,第一个数据成员放在offset为0的地方,之后的数据成员的存储起始位置都是放在该数据成...
  • u010185700
  • u010185700
  • 2016年09月13日 14:47
  • 570

C/C++ 内存对齐原则及作用

struct/class/union内存对齐原则有四个: 1).数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成...
  • chy19911123
  • chy19911123
  • 2015年10月04日 09:50
  • 3908

C++ 类的大小 struct/class内存对齐问题

第一:空类的大小 class CBase { }; 运行cout sizeof(CBase)=1; 为什么空的什么都没有是1呢? 先了解一个概念:类的实例化,所谓类的实例化就是在内存中分配一...
  • wjduguyuyun
  • wjduguyuyun
  • 2017年08月30日 08:53
  • 73

C/C++中 union/struct/class的内存对齐

1.联合体 在联合体中,各成员共用同一内存空间,以最大元素为准。 当一个联合被说明时,编译程序自动地产生一个变量,其长度为联合中最大的变量长度。 union un { char a[17]; ...
  • fool_duck
  • fool_duck
  • 2016年04月11日 22:47
  • 319

内存对齐与内存分配原则

首先讲一个概念—-内存对齐一种提高内存访问速度的策略,cpu在访问未对其的内存需要经过两次内存访问,而经过内存对齐一次就可以了。(?)打个比方就是:操作系统在访问内存时,每次读取一定的长度(这个长度是...
  • tingyun_say
  • tingyun_say
  • 2016年05月18日 14:30
  • 2051

C++之内存对齐原则

首先由一个程序引入话题:  1 //环境:vc6 + windows sp2  2 //程序1  3 #include   4   5 using namespace std;  6 ...
  • Mary19920410
  • Mary19920410
  • 2017年04月14日 19:04
  • 846

内存对齐原则

一、内存对齐的原因 1、平台移植原因:不是所有的硬件平台都能任意访问任意地址上的数据的,有些硬件平台智能在某些特定地址处读取特定的数据,否则会抛出硬件异常。 2、性能原因:数据结构(尤其是栈)应尽可能...
  • captain_wangnb
  • captain_wangnb
  • 2016年01月13日 19:45
  • 522

结构体struct 联合体union 及内存对齐

原文链接:http://blog.csdn.net/coolingcoding/article/details/7278555 当在C中定义了一个结构类型时,它的大小是否等于各字段(...
  • Aiphis
  • Aiphis
  • 2015年09月24日 10:33
  • 2474
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:struct/class/union内存对齐原则
举报原因:
原因补充:

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