《深度探索c++对象模型》学习笔记 - 附录
2009-02-24 09:07
218 查看
1. 关于整个书,我觉得如果能够把各种类的sizeof搞定,就肯定OK了。所以请参看另一篇文章"sizeof大全":
http://blog.csdn.net/sandyzhs/archive/2008/12/31/3662902.aspx
2. 对象在内存中的布局(不考虑padding,太复杂;只使用int,并假设sizeof(int) == 4byte;IDE是VC6.0)。
至此,《深度探索c++对象模型》学习笔记 系列全部结束。
http://blog.csdn.net/sandyzhs/archive/2008/12/31/3662902.aspx
2. 对象在内存中的布局(不考虑padding,太复杂;只使用int,并假设sizeof(int) == 4byte;IDE是VC6.0)。
类 | 内存 | 类 | 内存 | |||||||||||||||||||||||||||||
1) class A{int x; }; class B{int z;}; class C: public A, public B{ int n;}; |
| 2) class A{ int x;virtual void f1()}; class B{int y; virtual void f2()}; class D: A, B{int z; virtual void f3()}; |
| |||||||||||||||||||||||||||||
3) class A{ int x;virtual void f1()}; class B{int y;}; class D: A, B{int z; virtual void f3()}; |
| |||||||||||||||||||||||||||||||
4) class A{int a;}; class B1: A{int b1;}; class B2: A{int b2;}; class C1: virtual B1{int c1;}; class C2: virtual B2{int c2;}; class D: C1, C2{int d;}; 这个比较变态,注意:相对于B1和B2来说,A只是普通基类。A在D中根本就没有被共享 |
| |||||||||||||||||||||||||||||||
5) class A{int x;virtual void f()}; class B: virtual A{int z1;}; class C: virtual A{int z2;}; class D: B, C{int d;}; (右面**:可能是offset to A,也可能是B中自带的vptr。书上说是前者;根据分析应该是这样) |
| |||||||||||||||||||||||||||||||
6) class A{int x; virtual f1()}; class B:virtual A{int z1; virtual f2()}; class C:virtual A{int z2; virtual f3()}; class D: B, C{int d; virtual f4()}; (注意:D的vptr肯定是和其基类共享了,但B、C的vptr还在) |
| 7) class X{int x;}; class Y1: virtual X{int y1;}; class Y2: virtual X{int y2;}; class Z1: Y1{int z1;}; class Z2: Y2{int z2;}; class W: Z1, Z2{int w;}; |
|
相关文章推荐
- 《深度探索c++对象模型》 学习笔记 - 前言
- JavaScript学习笔记3-附录(Java的各类型数据在内存中分配情况详解)
- GJB438B-2009附录S与DI-IPSC-81442的差异——GJB438B学习笔记之十
- Objective-C基础教程学习笔记(附录)从Java转向Objective-C
- 《深度探索C++对象模型》第五章Semantics of Construction,Destruction, and Copy_学习笔记
- NumPy学习笔记 (附录: NumPy for Matlab Users)
- 购物网学习笔记附录:动软代码生成器和微软企业库的使用
- GJB438B-2009附录G与DI-IPSC-81427的差异——GJB438B学习笔记之五
- 《深度探索c++对象模型》学习笔记 - 2 构造函数语义学
- 《深度探索c++对象模型》 学习笔记 - 5 构造、析构、拷贝 语义学
- GJB438B-2009附录K与DI-IPSC-81429的差异——GJB438B学习笔记之六
- 【笔记】Spring MVC学习指南(附录)
- JavaScript学习笔记2-附录(转自w3cschool)
- 《统计学习方法》附录C拉格朗日对偶性学习笔记
- 《深度探索c++对象模型》 学习笔记 - 1 关于对象
- 《深度探索c++对象模型》 学习笔记 - 4 Function语义学
- 《深度探索c++对象模型》学习笔记 - 6 执行期语义学
- JavaScript学习笔记2-附录(JavaScript中的内置对象)
- Objective-C基础教程学习笔记(附录)从Java转向Objective-C
- GJB438B-2009附录Q与DI-IPSC-81440的差异——GJB438B学习笔记之八