您的位置:首页 > 其它

字节对齐、sizeof的问题分析

2012-03-07 11:10 239 查看
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: