c++ 类的对象的大小

c++ 类的大小


//从以上的几个例子不难发现类的大小:
 0. 空类的对象,对象大小是1。因为这样,才能有唯一的地址空间与之对应。否则空类的对象数组 obj[10],中ojb[0] 和 obj[1]公用地址空间了。
1.为类的非静态成员数据的类型大小之和.
2.有编译器额外加入的成员变量的大小,用来支持语言的某些特性(如:指向虚函数的指针).
这里,详细说明一下。
(1) 没有父类
不管有几个虚函数,只要有虚函数,就会有一个指向虚函数表的指针,4bytes大小(32bit 系统下)。
(2) 有父类。
复杂,有待讨论。
虚拟继承等。
还要注意父类中有虚函数,也会继承过来,有虚函数表指针。
3.为了优化存取效率,进行的边缘调整.
与类中的构造函数,析构函数以及其他的成员函数无关.

对象在内存中分为几个部分。
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值