C++类和结构体的大小

1、规则

(1)空类大小为1,因为C++标准规定空类也可以实例化,每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址。

(2)类的大小为非静态成员数据的类型大小之和,静态成员存放在全局数据段,不影响类实例化的大小。

(3)类本身的一些特性占用的大小,虚函数表就占用4个字节,当类中含有虚函数时,无论是否是继承来的,无论数量,那么都会产生一个4字节的指针指向虚函数表。

(4)为优化存取,会产生字节对其问题。

(5)类的成员函数不会占用空间


C++结构体的大小规则与类一样。结构体中也可以定义虚函数和static变量。后面会专门讲解C++中类和结构体的区别。

2、例程

(1)

class CTestClass  
{
public:
CTestClass();
~CTestClass();
};

sizeof(CTestClass);//1空类大小为1

(2)

class CTestClass  
{
public:
CTestClass();

~CTestClass();

private:

        char a;

};

sizeof(CTestClass);//1,大小为成员变量大小

class CTestClass  
{
public:
CTestClass();

~CTestClass();

private:

        char a;

        char b;

};

sizeof(CTestClass);//2,大小为成员变量大小

(3)

class CTestClass  
{
public:
CTestClass();

~CTestClass();

private:

        char a;

        int b;

};

sizeof(CTestClass);//8,字节对其

(4)

class CTestClass  
{
public:
CTestClass();

virtual ~CTestClass();

        void Test();

private:

        char a;

        int b;

};

sizeof(CTestClass);//12,虚函数表指针占用4个字节,成员函数对类大小无影响

你可能感兴趣的:(C++)