从编译器的角度更加深入考虑封装的使用

编译器调用虚拟函数的汇编码(参考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,应该考虑封装这些调用到一个地方, 从编译器生成的最终代码的角度考虑封装技巧的使用,从而可以有效减少编译时间。

你可能感兴趣的:(编译器)