c++ 类的大小
//从以上的几个例子不难发现类的大小:
0. 空类的对象,对象大小是1。因为这样,才能有唯一的地址空间与之对应。否则空类的对象数组 obj[10],中ojb[0] 和 obj[1]公用地址空间了。
1.为类的非静态成员数据的类型大小之和.
2.有编译器额外加入的成员变量的大小,用来支持语言的某些特性(如:指向虚函数的指针).
这里,详细说明一下。
(1) 没有父类
不管有几个虚函数,只要有虚函数,就会有一个指向虚函数表的指针,4bytes大小(32bit 系统下)。
(2) 有父类。
复杂,有待讨论。
虚拟继承等。
还要注意父类中有虚函数,也会继承过来,有虚函数表指针。
3.为了优化存取效率,进行的边缘调整.
4.与类中的构造函数,析构函数以及其他的成员函数无关.
对象在内存中分为几个部分。
1. 虚函数表 virtual table.
2. 成员变量
内存中的排列顺序
父类1的v-table 其中包括该类的v-table,接在父类1的v-table后面
父类1的成员变量
父类2的v-table
父类2的成员变量
父类3的v-table
父类3的成员变量
...
该类的成员变量
# 父类的顺序是类定义时继承的顺序
# 每个类中的成员变量的顺序是按照成员变量声明的顺序存储,会有对齐的情况。
陈浩的csdn博客,文章详细介绍了虚函数。
http://blog.csdn.net/haoel/article/details/1948051
http://www.cnblogs.com/luxiaoxun/archive/2012/09/01/2666395.html
http://blog.chinaunix.net/uid-26722078-id-3756839.html
http://blog.csdn.net/hackbuteer1/article/details/7475622