簡體   English   中英

C ++-應用於對象類的sizeof函數

[英]C++ - sizeof function applied to object class

我收到以下與sizeof()有關的問題:

class C
{
public:
    C();
    virtual ~C();

    unsigned char _member0 s[4];
    static long _member1 d;
}

int main()
{
    C vc;
    cout << sizeof(vc);
}

有人可以解釋在這種情況下如何評估sizeof()函數嗎?

確切的答案可能因編譯器而異,因此從嚴格意義上講,對您的問題的答案是“ 實現定義的”
認為這是一次采訪Q( 看過您以前的Q ),您應該指出以下幾點:

  • 允許編譯器在結構/類中添加填充字節,這可能會增加大小。
  • 編譯器可能將vptr添加到類實例中,這可能會增加大小。
  • 類成員將占用內存。
  • static成員不會增加類對象的大小,因為它們不屬於類的實例,而是屬於該類。

它給出了vc的大小。 vc是C類。C類的每個對象都包含元數據(指向vtable的指針),因為C包含虛方法。 另外,C有一個數據字段(字符數組)。

因此,vc的大小應為指針的大小加上四個字節(加上填充,請參見下面的注釋,謝謝)。

d不是C類對象的組成部分,因為它是靜態的,因此不算在內。

所以我們有:

------vc---------             ----vtable for C----           ----statics----
| ptr to vtable | ----------> | pointer to ~C    |           | C::d        |       
|---------------|             | ...              |           | ...         |
| char [4]      |             --------------------           ---------------
-----------------

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM