求解sizeof(X)

Aim: 求解sizeof(X)

definition: 

1)对界(a)e.g.对齐的位置: 从0开始算; 对齐条件n指开始元素位置编号是n的整数倍

2)占多少字节(b):根据数据类型储存空间算

3) sizeof指的一共占的字节数, 与对界和数据类型存储空间有关

sizeof(X) = Fun(a, b), 对于参数b根据硬件有关当硬件固定是参数b固定,参数a需要计算。对界本身有两种分类 as follows:

A)自然对界:指default版的对齐方式

对齐规则:

对于基本类型(int, char, long, double):  对界条件 = 该类型的储存空间

复合数据类型(array, struct, union): 对界条件 = 最大成员储存空间

eg:

struct s0{
    short a;  // 2
    long b;   // 8
    int c;      //4
}s0;

struct s1{
    short a;    //2
    int b;        //4
    long c;     //8
}s1;

printf("%d", (int)sizeof(s0));    // 24
printf("%d",(int)sizeof(s1));    //16
具体参照reference的内容 s0最后需要补齐位数(对界条件为8) 所以为24


B)强制对界

可以通过#pragma pack(M)改变编译的对界方式 即set 对界方式= M

对界条件 = min(编译器对界条件, 自身对界条件)


提示:

复合类型对齐方式 = 最大成员的对齐方式

数组对齐方式= 元素对齐方式




reference:

http://www.th7.cn/Program/cp/201209/92293.shtml   ps上面的size值可能有问题,意会即可,本blog在linux centos 6.3_x64上测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值