计算类对象的大小
计算类对象的大小只需要将类中的成员变量加起来,同时注意内存对齐。
例
class A
{
public:
void SetAInfo(const char* name, char* gender ,char age)
{
}
private:
char _name[20];
char _gender[3];
int _age;
};
int main()
{
cout << sizeof(A) << endl;
return 0;
}
根据结构体内存对齐规则
name是char型,对应到结构体变量偏移量为0的地址处。
gender是char型,对齐数为1,要对齐到对齐数的整数倍的位置,对应到偏移量为20的地址处。
age是int型,对齐数为4,要对齐到对齐数的整数倍的位置,对应到偏移量为23的地址处。
因此,sizeof结果为28。
空类
class A
{
public:
void SetA(int a)
{
_a = a;
}
private:
int _a;
};
class B
{
public:
void test(B)
{}
};
class C
{};
int main()
{
cout << sizeof(A) << endl;
cout << sizeof(B) << endl;
cout << sizeof(C) << endl;
return 0;
}
sizeof结果为4,1,1
空类有大小
原因:
假设在C中定义c1,c2,c3三个不同对象,若空类大小为0,那么c1,c2,c3将存储在相同的空间中,c1,c2,c3成为相同对象,假设错误。
因此,空类存在大小,目的是为了区分空类定义出来的不同对象。
在主流的编译器(如VS,g++)中,空类的大小为1。