字节对齐、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;

 

你可能感兴趣的:(字节对齐、sizeof的问题分析)