C 類的大小計算

2021-06-07 07:20:31 字數 1342 閱讀 5872

1.空類的大小:

class c2

;結果:sizeof(c2) = 1

分析:這是因為當我們例項化乙個類物件時,就是為其分配記憶體空間,並且每乙個例項化的類都會有乙個獨一無二的記憶體位址,空類也不例外,必須為其分配乙個記憶體,因此編譯器給分配了乙個位元組的記憶體,使其獨一無二。

2.只含有乙個虛函式的類的大小:

class c1

protected:

private:

//   double m_dvar1;

//   char   m_cvar2;

};結果:sizeof(c1) = 4

分析:虛函式指標佔四個位元組。

3.對齊原則. 當乙個類裡有個資料型別佔位元組數最大時, 其他資料型別大小和最大的對齊.。

情況1:class c1

protected:

private:

double m_dvar1;

char   m_cvar2;

};結果:sizeof(c1) = 16

分析:m_dvar1佔8個位元組,m_cvar2佔乙個位元組,但是m_cvar2要與m_dvar1保持對齊,所以 8 × 2 = 16

情況2:class c1

protected:

private:

double m_dvar1;

char   m_cvar2;

int    m_ivar3;

};結果:sizeof(c1) = 16

分析:m_cvar2 和m_ivar3相加沒有超過8個位元組,算成8個位元組,與m_dvar1一共還是16個位元組。

情況3:有虛函式存在時

class c1

protected:

private:

double m_dvar1;

char   m_cvar2;

// int    m_ivar3;

};結果:sizeof(c1) = 24

分析:如果有虛函式存在,虛函式會單獨處理,不遵守對齊原則,m_cvar2補齊8位元組,虛函式補齊8位元組,加上m_dvar1 8+ 8+ 8 = 24

4.類中存在靜態成員變數

class c1

protected:

private:

// double m_dvar1;

char   m_cvar2;

// int    m_ivar3;

static int data1;

};結果:sizeof(c1) = 8

分析:靜態成員變數被編譯器存放在global data members中,不影響類的大小,類是否被例項化,它都存在。

以後遇到其它情況再總結。

c 類大小計算

先給出總結 以下測試均在x64系統執行 1 原則1 空類的大小為1位元組。includeusing namespace std class a int main int main virtual void fun2 int test1 static void test2 static int c s...

C 學習 c 類大小計算

涉及到c 中求類大小時需要特別注意一下幾點 為類的非靜態成員資料的型別大小之和。有編譯器額外加入的成員變數的大小,用來支援語言的某些特性 如 指向虛函式的指標 虛繼承 多重繼承 為了優化訪問效率,進行的邊緣調整。與類中的建構函式,析構函式以及其他的成員函式無關。5.私有繼承,會去繼承之前的私有成員變...

C 類所佔記憶體大小計算

c 類所佔記憶體大小計算 文章出處 作者 vision chen yeah.net 說明 筆者的作業系統是32位的。class a sizeof a sizeof a 1 明明是空類,為什麼編譯器說它是1呢?空類同樣可以例項化,每個例項在記憶體中都有乙個獨一無二的位址,為了達到這個目的,編譯器往往會...