sizeof总结

sizeof():计算数据空间字节数

1. 指针的sizeof结果为4
2. 静态数组的大小可用sizeof直接计算,eg:str[]="abcdef";sizeof(str)为7,int A[100];sizeof(A)=100*4=400
3. 数组作形参时,数组名当做指针使用,对其sizeof的结果为4
4.基本数据类型的sizeof:sizeof(char)=1;    sizeof(short)=2;     sizeof(int)=sizeof(float)=sizeof(long)=4;  sizeof(double)=sizeof(long long)=8
5. 对复杂数据类型的sizeof操作

        编译器会对复杂数据类型做对齐处理:在默认情况下,规定各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数;同时,整个结构的大小必须为占用最大空间的类型所占用的字节数倍数

      

eg:

     struct MyStruct{

           double dda1;

           char dda;

            int type

     };
  • 首先给dda1分配空间,其相对结构起始地址的偏移量为0,是sizeof(double)的倍数,该成员变量占用8个字节;
  • 再给第二个成员变量dda分配空间,此时其相对偏移量为8,是sizeof(int)=1的倍数,dda占用1个字节;
  • 然后给第三个成员变量type分配空间,此时其相对偏移量为9,不是sizeof(int)的倍数,则编译器自动填充三个字节,使得偏移量变为12,正好是sizeof(int)=4的倍数,type占用4个字节;
  •  最后计算整个结构的大小,由上面所述8+4+4=16,正好为占用最大空间类型的sizeof(double)的倍数,则sizeof(MyStruct)=16

但有两点需要注意,

       第一、结构或者类中的静态成员不对结构或者类的大小产生影响,因为静态变量的存储位置与结构或者类的实例地址无关。

       第二、没有成员变量的结构或类的大小为1,因为必须保证结构或类的每一个实例在内存中都有唯一的地址。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值