C++ sizeof 計算類的大小

來源:互聯網
上載者:User

計算類的的大小時只考慮成員變數的大小,而不考慮成員函數的大小!

但是如果類中含有虛函數,那麼在計算類的大小時就要額外的加上4個位元組!這4個位元組是虛函數表占的位元組數!

在計算類的大小時還要注意一點就是 記憶體對齊!

看一個例子:

class CTest
{
    char ch;
}; // sizeof(CTest) = 1  class CTest
{
    char ch;
    int  num;
};

// sizeof(CTest) = 8

很奇怪,為什麼第二個CTest的大小是8位元組了,這裡就涉及到了記憶體對齊問題

int的大小為 4位元組, 由於記憶體所以ch的填充3個位元組!所以CTest的大小為8位元組

 

再來看一列:

class CTest
{
    char ch;   
    int  num;
    double b;   
};

// sizeof(CTest) = 16

這裡ch+num=5位元組,填充到b的大小,也就是8位元組!

class CTest
{
    char ch;  

    double b;
    int  num;   
};

// sizeof(CTest) = 24

這裡ch和num都填充到了8位元組

 

繼承類大小

class CT1()
{
   int num;
};

class CT2 : public CT1
{
   int val;
};

// sizeof(CT2) = 4+4 = 8;

sizeof (繼承類) = 本身成員變數+父類的大小,如果是虛擬繼成的話,則另外加一個指向父類指標的大小.

如果兩個類C1,C2分別繼承了含有虛函數的類C3,類C4同時繼承C1和C2,那麼在C4隻保留一份指向虛基類C3的指標

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.