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;