首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用于对象类的C++ - sizeof函数

应用于对象类的C++ - sizeof函数
EN

Stack Overflow用户
提问于 2012-08-30 15:00:26
回答 2查看 173关注 0票数 2

我收到了以下与sizeof()相关的问题:

代码语言:javascript
复制
class C
{
public:
    C();
    virtual ~C();

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

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

有人能解释一下在这种情况下sizeof()函数是如何计算的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-30 15:07:29

确切的答案可能会因编译器而异,因此严格意义上说,您的问题的答案是实现定义的

考虑到这是一个面试Q(看你之前的Q),你应该指出以下几点:

  • 允许编译器向结构/类添加填充字节,这可能会增加大小。
  • 编译器可能会将vptr添加到类实例中,这可能会增加大小。memory.
  • static
  • 类成员将占用类成员不会影响类对象的大小,因为它们不属于类的实例,而属于类。
票数 7
EN

Stack Overflow用户

发布于 2012-08-30 15:04:35

它给出了vc的大小。vc属于C类。C类的每个对象都包含元数据(指向vtable的指针),因为C包含虚方法。此外,C还有一个数据字段(字符数组)。

因此,vc的大小应该是一个指针加上四个字节的大小(加上填充,参见下面的注释,谢谢)。

D不是C类对象的组成部分,因为它是静态的,因此不计算在内。

所以我们有:

代码语言:javascript
复制
------vc---------             ----vtable for C----           ----statics----
| ptr to vtable | ----------> | pointer to ~C    |           | C::d        |       
|---------------|             | ...              |           | ...         |
| char [4]      |             --------------------           ---------------
-----------------
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12191510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档