结构体及共用体的大小

来源:互联网 发布:java发送微信消息接口 编辑:程序博客网 时间:2024/05/21 11:29

结构体:
第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始,如:int( 在32位机中为4字节,64位机中为8字节)要从4或8的整数倍地址开始存储,需补齐。

struct A                               {                                     // 所占内存大小    char ch;                         //    1+3    int a;                          //      4}                                  //    1+3+4=8

共用体(联合体):
各个成员以同一个地址开始存放,每一个时刻只可以存储一个成员,所以只需取占内存最大的作为联合体的大小。长度为联合体中元类型(如数组,取其类型的数据长度)最大的变量长度的整数倍,且要大于等于其最大成员所占的存储空间。

union B                                // 所占内存大小{    char a;                                //1    int b[5];// 元长度:4                  //4*5                 double c;                             // 8    int d[3];  //元长度:4                  //4*3}                                          //20+4

例:下面结构体

struct s1                           // 所占内存大小   {                                                              char ch,*ptr;                     // 1+3,4    union    {        short a,b;                     //(2,2        unsigned int c:2,d:1;          //2,1)    };                                  //2+2    struct s1 *next;                     //4    };                
 sizeof(struct s1)的值 :1+3+4+2+2+4 = 16 字节
原创粉丝点击