编译与效率

来源:互联网 发布:淘宝定制类目有多少家 编辑:程序博客网 时间:2024/05/18 17:57
经常见很多人问相关的问题(当然只是其中的一部分,例如virtual function 对效率的影响,增量变异的原理等等),自己也不是完全明白。花了一个下午的时间作了一点总结,大多数内容来自,wikipedia.org只是翻译和总结。如有不当之处,请提出。如有不全之处也请提出,我及时更新,为其他遇到类似问题的人,提供一点帮助。

1、增量编译(Incremental compiler)[1]

  通常,一个编程语言的编译器是这样一种程序,它读取一个或多个源代码文件,产生出一个或多个机器码或其它低级语言代码文件;然后这些生成的代码文件被生成为最终的执行程序。这种情况下产生的执行程序,在执行时是不需要编译器的。这种方式有时被称作“batch compiler”,因为在真正运行之前,一系列(a batch of)的文件生成出最终的执行文件。
  与之相对,"incremental compiler"是这样一种编译器。该种编译器在程序运行时,作为程序的一个运行部分。这样他就允许在任何时间(译注:无论指运行期还是非运行期)编译程序的任何部分,或者是扩展原有的程序,或者是代替原有的部分。因为incremental compliler是运行时系统的一部分,所以任何时间源代码都可以从终端、文件、甚至是运行时声称的一段数据结构输入,然后被解释成机器代码块或是函数。新生成的函数可以替换原有的同名函数。并且新编译出的程序可以在程序运行时,立即被更新、使用。


2、Dynamic compilation [2]
Dynamic compilation是某些编程语言为获得程序运行期效率而引入的一个执行过程。Java是使用Dynamic compilation技术最为人熟知的一门语言。而Dynamic compilation起源于一个名为SELF的编程语言。Dynamic compilation允许执行只有运行期才知道如何处理的优化。使用Dynamic compilation的运行时系统在刚开始运行的几分钟内运行速度会比较慢,然后当大多数编译和重编译(compilation and recompilation)执行完备,就会运行的很快。由于初始阶段的运行缓慢,在某些特定情况下Dynamic compilation是不可取的。大多数Dynamic compilation的实现中,很多应当在initial comilation阶段进行的优化被延时到运行时的further complilation执行,这更导致了无味的减速。JIT是Dynamic compilation的一种形式。

3、Just-in-time [3]
JIT也被称作dynamic translate,是为提高程序运行效率的一种技术。JIT基于运行时环境中两个原有的idea: bytecode com;ilation & dynamic compilation。在运行期,它在真正运行程序之前,把代码转换为真正的可执行代码。例如把bytecode转换为native machine code。
to be continued.....


下面内容因为比较常见的问题,或者篇幅过长不做过多翻译,只提一下文章的大体内容

4、Virtual method table [4]
简单的解释了virtual table的实现方法。从一个例子出发,解释了,C++下vtable实现方式的内存布局,以及由此可能带来的效率问题。随后简单介绍了其他的一些类似实现发方式,并得出结论“vtable实现”可能是最容易实现和调试的,并且是最符合c语言精神的

5、The Direct Cost of Virtual Function Calls in C++


  在理解上面的解释时,或许我们都默认了这样一个前提理解:所有指令都是按照被生成的bytecode 或 nativecode顺序执行的,一个接一个。但是回想一下我们的CPU的发展进程,现代CPU的运算性能的提高速度仿佛远远大于了其主频的提高速度,为么?因为CPU的架构在改变,CPU执行代码的方式在改变,这些改变对程序的运算性能有一定的影响。
  这篇论文从题目上看是讲解Virtual Function的,但是他把程序的运行和计算机的体系结构联系在一起进行。讲解了超标量、管线等内容对virtual function执行效率的影响。我感觉该文不但可以帮助我们了解计算机体系,而且可以从另一个方面更深入的了解引入virtual function call之后对程序运行效率的“直接影响”。文章认为对程序的间接影响--编译优化--是次要因素,没有进行讨论。
 



[1]        Incremental compiler
[2]        Dynamic compilation
[3]        Just-in-time
[4]        Virtual method table
[4]        The Direct Cost of Virtual Function Calls in C++
原创粉丝点击