1. 程式人生 > >C++類和結構體的大小

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個位元組,成員函式對類大小無影響