语言的学习(10)--类的成本
来源:互联网 发布:夜息seo 编辑:程序博客网 时间:2024/05/16 09:29
类主要包括了三个核心的概念界面(封装思想),继承,多态的思想。继承主要的目的在于自动复制已有的代码。多态性的目标就是为了使用统一的接口各种不同类型的操作.在本文中主要讨论C++ 的类的实现成本。
C++对OO的支持:基本类,单一/多重继承,单一继承带虚函数,多重继承带虚函数,虚基类
实现的成本的考察包括:对象空间成本,对象数据的存取成本,函数的成本。
基本类
单一/多重继承
单一继承带虚函数
多重继承带虚函数
虚基类
对象空间成本
基本的对象空间成本和结构体以及一般变量相同
同基本类不变
多出vptr和一个虚函数表
有n-1个虚函数指针
有n-1个虚函数表
thunk的assemble的代码段
有n-1个虚函数指针
有n-1个虚函数表
thunk的assemble的代码段
虚函数表多指向虚基类的offset
对象数据的存取成本
基本结构体的存取效率(主要是编译阶段可以确定基地址和offset)
运行阶段效率相同 但对于多重继承编译阶段需要调整this指针
运行阶段效率相同但对于深度继承编译阶段需要调整this 指针
运行阶段效率相同 但编译阶段需要调整this指针
运行效率比基本类型低需要做间接寻址(二次读内存)
函数成本
(静态函数和非虚成员函数效率与一般非类函数相当)
基本不添加函数成本
基本不添加函数成本
需要间接寻址两次一次vptr一次 虚函数表
对于次要函数表需要三次寻址以一次Thunk运行。次表的顺序是先到主表与运行thunk 然后再到次表当中找虚函数位置
非虚基类虚函数同多重继承。对于虚基类则再需要一个链接。
注:所以虚基类最好没有对象成员
注:
一 以上说的效率都是指运行阶段效率编译阶段的成本没有考虑。
二 继承主要是指公有继承的成本没有考虑包含,私有继承,保护继承
三 这里成本消耗是Lippman 在《Inside C ++ model》讨论的对象模型所带来的成本,不同的编译器实现可能有不同的成本
四 这里没有考虑构造函数,拷贝构造函数,析构函数对类的成本的影响
- 语言的学习(10)--类的成本
- 标准成本和实际成本的比较
- 成本要素和成本中心的区别
- 《怪诞行为学》零成本的成本
- 沟通的成本
- 不计成本的项目?
- 大学生的恋爱成本
- 外企的成本观
- 养一头猪的成本
- 国墅园的成本经
- 夫妻吵架的成本
- 跳槽的成本
- 使用flex的成本
- 网页兼容性的成本?
- 快乐的成本
- Dropbox的成本估算
- 小资的成本
- 时间成本的选择
- 知名大学研究风向标
- 语言的学习(9)--类的继承
- 目前几种主流的IPTV STB方案技术
- GNU make 指南
- 你觉得什么叫做幸福?
- 语言的学习(10)--类的成本
- Facing, Trying and Keeping
- 我是小臭臭
- 私有的构造函数作用
- B/S结构与C/S结构 --青蛙非王子(lostfrog)
- VB开发——"找不到工程和库"的处理
- VB开发——VB中如何四舍五入
- Exceptional C++ Style之22
- 软件评测师考试大纲