结构体元素布局与排列顺序对占用空间的影响

转载:http://blog.sina.com.cn/s/blog_4cd3b57101000kea.html

 1,结构体中变量的依声明的顺序来存放

 2,char可以以任一字节开始存放。

 3,short只能以一个字长的第一个字节或第三个字节开始存放。

 4,其他如int等等于四字节的类型只能从一个字长的第一个字节开始存放。

 5,double类型只能从两个字长整数倍的地方开始存放。

 6,当排列时的位置不能满足类型需要的开始位置时,往下掠过一个及以上的字节,开始存放。

 7,当排列完毕后,结构体必须补齐到,其长度为其结构体内长度最长的元类型的整数倍。

   例如:

struct Node
{
    char a;
    short b;
    char c;
    int d;
    double e;
    char f;
};

该结构体中,

第一个字节存储a,第二个字节略过,第三个和第四个字节存储b,

第二个字的第一个字节存储c,其余的三个字节略过,

第三个字存放d,

第四个字略过(条款5,6),

第五个字和第六个字存放e,

第七个字的第一个字节存放f,

其余三个字节以及第八个字均略过(条款7)。

所以最终此结构体的大小为8*4=32Byte。

上面的条款还不足解释下面的结构体内存分布:

struct NN
{
    Node mNode;
    char a; 
};

8,当结构体A包含结构体B时,B的大小和排列不变,A最后的补齐按照A和B所有的元素中最大的元类型的长度为单位。

由上面的试验可看出,结构体中变量声明的顺序比较重要,有时会大大影响到其占用的空间,最好的顺序应该是,将变量由小到大排列声明

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值