1 initialization和finalization算法
测试办法:启动一个控制台程序,由于通常的application有太多的单元引用,可能会形成一些调试上的麻烦app
通过测试,大体结果多是这样的测试
加载顺序与project及各单元的引用顺序有关spa
首先从project文件中加载第一个单元如A,在试图加载A的Initialization时,先查看A的uses部分,这里的uses不分 Interface部分仍是implementation部分,只分前后顺序,当发现A有Uses单元时,好比依次引用了单元B和C,则在加载A的 Initialization前,先加载B(这里能够理解为将A压入堆栈,专门处理B),依次递归,假如在对B单元进行处理时,发现B引用了A,根据测试 结果,猜想是先到“堆栈”里看有没有A单元,若是有,就跳过A的这部分处理,若是没有,就把B压入堆栈,处理新的引用单元调试
或者说在初始化时,有一个假想的队列,开始是空的,项目加载时,把第一个单元放在队列头上, 而后,将第一个单元打开,依次取uses的单元,若是队列中没有这个单元名,就追加到队列尾部,若是队列中已经有了,就跳过这个单元,依次递归,最后,把 项目全部uses到的单元放到一个队列中,而后,递归
Initialization的顺序是:从队列尾部倒推,依次执行各单元的initialization,队列
而finalization的顺序正好相反,从队列头部向后执行源码
上边的是有多是错误的,简单来讲,就是一个递归,碰到uses就找源码,递归到源码的uses,若是一个单元没有uses,则执行这个单元的Initializationit
关于队列的说法太武断了,应当就是一个简单的递归,个人算法很差,不知道如何描述io