c++对象模型以及内存布局的研究
2015-03-08 21:09
232 查看
先引出问题,看一段代码:
这样的三个类的结果都是: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++模型有关系?
还没写完先保存一下
#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++模型有关系?
还没写完先保存一下
相关文章推荐
- [C++对象模型][6]sizeof与对象内存布局
- [C++对象模型][6]sizeof与对象内存布局
- C++对象模型笔记:对象的三种内存布局
- C++对象模型之数据成员内存布局
- 虚继承内存布局@c++对象模型
- c++对象模型和对象内存布局
- C++对象模型之简述C++对象的内存布局
- C++对象模型之详述C++对象的内存布局
- C++对象模型笔记:对象的三种内存布局
- C++ - 对象模型之 内存布局
- C++对象模型笔记:对象实例内存布局的小小结
- c++对象内存模型【内存布局】
- c++对象内存模型【内存布局】
- C++对象模型笔记:对象的三种内存布局
- C++ 对象构造与析构以及内存布局
- [C++对象模型][6]sizeof与对象内存布局
- c++对象模型 内存布局
- 【C++再学习】【06】程序以及对象在内存中的布局
- C++对象模型之详述C++对象的内存布局
- C++ - 对象内存布局模型