字节对齐、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;
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的问题分析
- ARM程序由于字节对齐引起的问题深入分析[转]
- sizeof(struct)--关于字节对齐的问题
- C_语法概念_sizeof()功能:计算数据空间的字节数以及字节对齐问题
- ARM程序由于字节对齐引起的问题深入分析
- sizeof 与结构体大小及结构体对齐问题, 字节对齐
- 结构体的sizeof字节对齐问题
- ARM程序由于字节对齐引起的问题深入分析
- 常考笔试题,详细解剖C++运算符sizeof()的使用及字节对齐问题
- 基于结构体sizeof的字节对齐问题讨论
- ARM程序由于字节对齐引起的问题深入分析
- sizeof 和 strlen及字节对齐的问题
- 详细解剖C++运算符sizeof()的使用及字节对齐问题
- C++基础系列:sizeof与字节对齐问题
- 常考笔试题,详细解剖C++运算符sizeof()的使用及字节对齐问题
- C语言中一个字节对齐问题的分析
- C语言字节对齐问题
- C/C++ 字节对齐问题
- 依赖工程的关字节对齐问题
- C struct 中字节对齐问题