从编译器的角度更加深入考虑封装的使用
2008-06-15 21:51
253 查看
编译器调用虚拟函数的汇编码(参考think in c++):
push funparam ;先将函数参数压栈
push si ;将this指针压栈,以确保在当前类上操作
mov bx,word ptr[si] ;因为vc++编译器将vptr放在类的第一个位置上,所以bx内为vptr
call word ptr[bx+n] ;调用虚拟函数。n = 所调用的虚拟函数在对应 vtable 中的位置
大型软件开发中,写代码要考虑两方面:一方面,站在开发人员的角度,写好源码,让程序运行的更高效是我们所主要考虑的。这一方面不用多讲,因为,这是最正常的考虑。另一方面,由于软件系统非常庞大,除了需要考虑程序运行的更快更好(第一方面已经做到了)之外,还要考虑build的效率。大型软件出一个build的时间是非常可怕的。那么,减少build时间的需求应运而生。这正是第二方面的考虑:如何在写代码的时候考虑减少build的时间。对于c++来说,比如virtual function, new的编译开销,对于一些highly used class,应该考虑封装这些调用到一个地方,从编译器生成的最终代码的角度考虑封装技巧的使用,从而可以有效减少编译时间。
push funparam ;先将函数参数压栈
push si ;将this指针压栈,以确保在当前类上操作
mov bx,word ptr[si] ;因为vc++编译器将vptr放在类的第一个位置上,所以bx内为vptr
call word ptr[bx+n] ;调用虚拟函数。n = 所调用的虚拟函数在对应 vtable 中的位置
大型软件开发中,写代码要考虑两方面:一方面,站在开发人员的角度,写好源码,让程序运行的更高效是我们所主要考虑的。这一方面不用多讲,因为,这是最正常的考虑。另一方面,由于软件系统非常庞大,除了需要考虑程序运行的更快更好(第一方面已经做到了)之外,还要考虑build的效率。大型软件出一个build的时间是非常可怕的。那么,减少build时间的需求应运而生。这正是第二方面的考虑:如何在写代码的时候考虑减少build的时间。对于c++来说,比如virtual function, new的编译开销,对于一些highly used class,应该考虑封装这些调用到一个地方,从编译器生成的最终代码的角度考虑封装技巧的使用,从而可以有效减少编译时间。
相关文章推荐
- 深入理解c语言_从编译器的角度考虑问题_纪念Dennis Ritchie先生
- 深入了解VC++编译器的使用
- 将Unity的脚本封装为dll文件(使用monodevelop编译器)
- java十三周封装一个求一元二次方程根的类SquareEquation,要求考虑解方程的异常,再编写一个窗口类EquationFrame。要求窗口使用三个文本框和一个文本区,其中三个文本框用来显示生更
- 深入理解c/c++之从编译器角度理解变量和指针
- 有效的使用和设计COM智能指针——条款27:考虑__uuidof与uuid在关键字在不同编译器上的兼容问题
- 深入了解VC++编译器的使用
- 深入探讨this指针:从汇编的角度考虑
- 从源码角度深入分析log4j配置文件使用
- 由mybatis的逆向工程看如果使用封装代码(深入理解java面向对象的思维逻辑)
- 将Unity的脚本封装为dll文件(使用monodevelop编译器)
- JAVA--第十三周任务一封装一个求一元二次方程根的类SquareEquation,要求考虑解方程的异常,再编写一个窗口类EquationFrame。要求窗口使用三个文本框和一个文本区,其中三个文本框
- 深入了解VC++编译器的使用
- 基于ejb3,对JDBC进行封装,让使用JDBC时能像hibernate使用annotation注解一样简便,而且更加轻巧
- 深入了解VC++编译器的使用
- 三.OC基础--1.NSString的创建和使用,2多文件开发,3类方法,4封装
- Linux 内核链表的使用及深入分析
- 使用NSSM将exe封装为服务
- Python 封装使用日志处理类
- Qt+VS编译器:默认库“library”与其他库的使用冲突;使用 /NODEFAULTLIB:library