sizeof求类的大小
2015-06-03 00:01
155 查看
用sizeof求类的大小,http://blog.csdn.net/szchtx/article/details/10254007(sizeof浅析(三)——求类的大小),这篇博文给出了非常详尽的举例介绍。
但是细心的话,你会发现一个小瑕疵,那就是对如下例子求sizeof(B),在VS下是16不是12!
以下是我根据上机实验结果,总结的精华要点,希望从此以后不再为sizeof求类大小而烦忧:
注:以下是针对32位编译器而言
1. sizeof计算类的大小时,针对是该类型的实例,与该类型本身无关
2. sizeof(空类)=1,这是由编译器决定的,因为实例化一个空类也需要在内存中占用空间
3. 继承树中,不管是虚继承还是普通继承,同一层级中,不管虚多少次,只能算一次+4,不算的等同于注掉
4. 继承树中,不管是虚继承还是普通继承,跨层级凡是发现虚函数同名的,只能算一次,不算的等同于注掉
5. 虚继承,在继承树中每虚继承一次+4
6. 虚继承,跨层级只要虚函数不同名,就各自分别算一次+4
7. 普通继承,跨层级不管有多少虚函数,只能算一次+4,不算的等同于注掉
8. 静态变量不在类大小计算范围之内
9. 注意偏移对齐的问题,结果为4的整数倍,当int和doulbe在一起时向doulbe对齐,言外之意结果为8的整数倍
学技术有感:有时候不能太过于专牛角尖,因为很多时候结果怎么样完全取决于编译器内部是如何实现的,理解其用意或者思想即可,对完全黑盒的东西只能瞎试或瞎猜,太过深究是没有意义的。
但是细心的话,你会发现一个小瑕疵,那就是对如下例子求sizeof(B),在VS下是16不是12!
class A { public: int a; private: char b; }; class B : public A { public: int d; char c; };
以下是我根据上机实验结果,总结的精华要点,希望从此以后不再为sizeof求类大小而烦忧:
注:以下是针对32位编译器而言
1. sizeof计算类的大小时,针对是该类型的实例,与该类型本身无关
2. sizeof(空类)=1,这是由编译器决定的,因为实例化一个空类也需要在内存中占用空间
3. 继承树中,不管是虚继承还是普通继承,同一层级中,不管虚多少次,只能算一次+4,不算的等同于注掉
4. 继承树中,不管是虚继承还是普通继承,跨层级凡是发现虚函数同名的,只能算一次,不算的等同于注掉
5. 虚继承,在继承树中每虚继承一次+4
6. 虚继承,跨层级只要虚函数不同名,就各自分别算一次+4
7. 普通继承,跨层级不管有多少虚函数,只能算一次+4,不算的等同于注掉
8. 静态变量不在类大小计算范围之内
9. 注意偏移对齐的问题,结果为4的整数倍,当int和doulbe在一起时向doulbe对齐,言外之意结果为8的整数倍
学技术有感:有时候不能太过于专牛角尖,因为很多时候结果怎么样完全取决于编译器内部是如何实现的,理解其用意或者思想即可,对完全黑盒的东西只能瞎试或瞎猜,太过深究是没有意义的。
相关文章推荐
- 简单编辑器的入门使用,修改编辑工具增加表情
- VIEWGOOD(远古)企业集团资源库中全媒体资源交换与共享解决方案
- 使用 JMeter 完成常用的压力测试
- Ubuntu下配置samba实现文件夹共享
- Telnet登录Ubuntu
- X32与X64的Testing Signing for drivers
- 基于番茄土豆的scrum工时估计方法尝试
- ASP.NET 4.0 site displaying error - ISAPI “Restric
- error writing request body to server
- OSI 七层模型详解
- Linux的守护进程
- tmux的使用
- Xshell的使用 Xshell配色及其编码设置
- fbterm使用
- 用循环数组实现约瑟夫环
- 前端学习笔记之页面制作(二)——开发环境Sublime Text2(持续更新)
- 前端学习笔记之页面制作(三)——HTML
- 前端学习笔记之页面制作(一)——PS切图
- 深入浅出ClassLoader
- C中的%d,%o,%f,%e,%x的区别