请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请问老师关于sizeof一个类实例的问题

写了个简单的类实例化之后对其进行sizeof,发现windows上mac上不一样
windows:
图片描述
mac:
图片描述
windows下是16我能理解,但是mac下是24就不太能理解了。

我试了一下如下的操作:
mac下

class Parent {};
class Child: public Parent {
  private:
    int _ding1;
    double _ding2;
};

int main(void) {
  Child test1;
  cout << sizeof(test1) << endl;
  return 0;
}

这种情况下输出 16

然后又试了一下,把child中private中的int类型干掉:
mac下

class Parent {};
class Child: public Parent {
  private:
    double _ding2;
};

int main(void) {
  Child test1;
  cout << sizeof(test1) << endl;
  return 0;
}

这种情况输出 8

不太能理解。。。。请教老师

正在回答

1回答

咋们原则上不解决不是课程上的问题;对象模型问题请见我们讲的对齐问题,这里提示你32位系统虚表是个地址表,会占用一个指针的空间。

0 回复 有任何疑惑可以回复我~
  • 提问者 Osuribaba #1
    老师好,这个就是课程上我碰到的问题。在第7章第18小节“Hack对象模型和虚函数 ”中,您对类的实例进行sizeof操作,然后我自己写demo试了试,发现windows下和您讲的是一样的,但是mac下好像稍微有点点区别。
    以上面那图2为例,int 类型的ding1占4字节,double的ding2占8字节,然后child继承了parent里头的virtual,这virtual是个指针,占4字节,按照我的理解他 sizeof 的话应该也是16字节。但是mac下输出的是24字节。所以我不太明白这是不是不同系统的原因还是有什么其他说法。
    回复 有任何疑惑可以回复我~ 2020-04-12 13:47:28
  • quickzhao 回复 提问者 Osuribaba #2
    主要是不同编译器可能会有差异,这个需要你看苹果系统中到底用的是什么编译器,基本的原理都一样的。
    回复 有任何疑惑可以回复我~ 2020-04-12 14:24:40
  • 提问者 Osuribaba #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-04-12 14:35:46
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信