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