sizeof总结

来源:互联网 发布:理财产品软件 编辑:程序博客网 时间:2024/05/07 18:29

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,因为必须保证结构或类的每一个实例在内存中都有唯一的地址。




0 0