zoukankan      html  css  js  c++  java
  • c++对象模型以及内存布局的研究

    先引出问题,看一段代码:

    #include <iostream>
    using namespace std;
    
    class A { };
    
    class B { 
    public:
      B() {}
      ~B() {}
    };
    
    class C {
    public:
      C() {}
      ~C() {}
      void foo() {}
    }

    class D {
    public:
      D() {}
      virtual void foo() {}
    };

    class E : public D{
    public:
      virtual void foo() {}
    };
    int main() { A a; cout << sizeof(a) << endl;   B b;   cout << sizeof(b) << endl;   C c;   cout << sizeof(c) << endl;

      D d;
      cout << sizeof(d) << endl;

      E e;
      D *pd = &e;
    }

    这样的三个类的结果都是:1,由此我写出我的几个问题:

    (1)对于类A来说,整个类是空的,也就是说不会占用内存,所以sizeof(A)应该是0,但是为什么结果是1?

    (2)对于类A和类B来说,在类B里面我们添加了构造函数和析构函数,为什么结果仍然是1呢?

    (3)C++对象模型是什么以及如何在内存里布局呢?

    (4)对于类D来说,为什么加入一个虚函数foo()结果就是8了呢(x86_64)?

    (5)对于类E来说,为什么通过pd->foo()就能调到E的foo()呢?

    对于这4个问题,我觉得他们其实就是跟C++模型有关系?


    还没写完先保存一下

  • 相关阅读:
    学习JavaDay07
    学习JavaDay05
    学习JavaDay0402
    学习JavaDay04
    学习JavaDay03
    学习JavaDay02
    学习JavaDay01
    数据库的增删改查
    关于Spring
    关于多线程Thread的简单应用
  • 原文地址:https://www.cnblogs.com/457220157-FTD/p/4322283.html
Copyright © 2011-2022 走看看