赤月传说2装备爆率:计算结构体的大小(VC++)

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 15:11:35
计算结构体的大小(VC++)2011年04月29日 星期五 12:27

摘要:本文简要介绍了VC++编译器中结构体大小的计算原则并给出了几个实例

关键字:struct,sizeof,对齐

           基本数据类型如char,int,double的大小可以直接拿到,数组的大小就是元素类型乘以数组长

度。较为复杂的类型就是结构体,他的大小并不是简单的把各个元素的长度相加,而是要考虑到编译器

所做的对齐填充处理。

           VC++编译器中的结构体的对齐要遵循以下三条原则:

一、结构体中成员变量的偏移量(相对于结构体起始位置)必须是该成员变量大小的整数倍。

二、结构体的总大小必须是所有成员变量大小的整数倍。

三、当结构体重有嵌套的结构体时,只需把嵌套的结构体展开。但是嵌套结构体的第一个元素

          的偏移量必须是被展开的结构体的最大的成员变量的整数倍!

          注意,以上原则只使用于微软的C/C++编译器(X86内核),在其他编译器中如GCC/G++中,

编译器对对齐的处理时不一样的。

          下面给出了四个结构体,这些结构体的大小都可以通过以上三条原则计算出,实践表明

计算结构与在vc++编译器中的运行结果一致!

/*
* 计算结构体的大小
*/

#include

using namespace std;

struct Struct1
{
char a;
double b;
};

struct Struct2
{
char a;
double b;
char c;
};

struct Struct3
{
char a;
char c;
double b;
};

struct Struct4
{
char a;
struct StructInter
{
   int b;
   double c;
   int d;
} Si;
int e;
};
void test()
{
cout<cout<cout<cout<}

int main(int argc, char* *argv)
{
test();
return 0;
}