字节对齐、sizeof的问题分析

1. 字节对齐应用

struct test1
{
    char m1;
double m2;
    int m3;
};

sizeof(test1)=(1+7) + (8) + (4+4) = 24

struct test2
{
   char m1;
   int m3;
   double m2;

};

sizeof(test2)=(1+3) + (4) + (8) =16

struct test3
{
   int m3;
   double m2;
   char m1;

};

sizeof(test3)=(4+4) + (8) + (1+7) =16

2. 参数为数组或指针

int a[50]; //sizeof(a)=4*50=200; 求数组所占的空间大小

int *a=new int[50];// sizeof(a)=4; a为一个指针,sizeof(a)是求指针的大小,在32位系统中,当然是占4个字节。

任何类型的指针,都占4个字节。如char *p;  sizeof(p) = 4;

注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。

3. 参数为结构或类。
Sizeof应用在类和结构的处理情况是相同的。
但有两点需要注意,第一、结构或者类中的静态成员不对结构或者类的大小产生影响,因为静态变量的存储位置与结构或者类的实例地址无关。
第二、没有成员变量的结构或类的大小为1,因为必须保证结构或类的每一个实例在内存中都有唯一的地址。

下面举例说明,

Class Test{int a;static double c};//sizeof(Test)=4.
Test *s;//sizeof(s)=4,s为一个指针。
Class test1{ };//sizeof(test1)=1;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值