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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

union 类型 内存对齐

如下代码结果为什么是24?union DATE { char a; int i[5]; double b; }; DATE max; cout这个问题很好...

struct/class/union内存对齐原则

struct/class以及union内存对齐四个原则: 1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员...

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

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

C/C++中关于struct和union的内存对齐原则

在sizeof计算一个结构体的大小时,经常得到的值比结构体内部成员所占内存总和要大,这就是因为在结构体内部,成员在存储时有对齐的规则。      对齐原则一般满足以下几点: 1.结构体第一个数据成...

C/C++ struct/class/union内存对齐 [转]

转载地址:http://www.cnblogs.com/biyeymyhjob/archive/2012/09/07/2674992.html struct/class/union内存对齐原则有四个...

struct位域,对齐以及union作为class需要注意的地方

一. struct对齐在c/c++中,struct结构体的大小不是简单的成员变量所占空间大小的累加,这里面涉及到变量对齐(alignment)的概念,由于计算机中内存的结构,使得cpu从某个特定边界的...

sizeof(union) 、sizeof(struct) 和内存对齐技术

一,union:C/C++关键字  共用体(联合)        共用体的声明和共用体变量定义与结构十分相似。形式为:   [html] view plaincopy ...

C++:struct和union 内存字节对齐问题

struct内存对齐问题1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始...

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

一,union:C/C++关键字  共用体(联合)        共用体的声明和共用体变量定义与结构十分相似。形式为:   union 共用体名 {    数据类型 成员名;    数据类型...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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