Delphi initialization和finalization

 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

相關文章
相關標籤/搜索