回答
我的答案是基於如何在Linux/glibc的/ ELF動態鏈接的作品,但我會假設整體答案是其他平臺一樣的:
有一個動態加載的第一個電話之間的差異符號和下一個呼叫。第一個電話很貴,可能涉及很多週期。所有其他呼叫或多或少都在1-2條指令之外。
它的工作方式是鏈接器在Procedure Linkage Table中設置一個條目,該條目從Global Offset Table獲取該外部函數的地址。首先,將GOT的地址指向運行動態鏈接程序的存根,以解析DLL中函數的實際地址。這可能需要很多週期,但一旦完成一次,動態鏈接器將路徑GOT條目直接指向該函數,因此下一次調用PLT代碼將直接調用該函數。
這裏是通過這個過程的一個鏈接到一個相當好走:http://www.technovelty.org/linux/pltgot.html
在Windows上的DLL中,所有這些工作都是在模塊加載時由加載程序完成的。 –
我相信只有當DLL沒有被LoadLibrary動態加載時纔會出現這種情況。 –
@Tamas:爲什麼?因爲我們需要運行時加載。 – Cartesius00
- 1. DLL的開銷
- 2. Scala - 調用'頭等函數'的開銷
- 3. 減少javascript函數調用開銷
- 4. 調用DLL函數
- 5. DLL跟蹤函數調用
- 6. 從DLL調用函數?
- 7. 調用DLL函數問題
- 8. DLL函數調用宏
- 9. 調用一個dll函數
- 10. 從VB6調用DLL函數
- 11. 從matlab調用dll函數
- 12. 調用非DLL函數
- 13. 參數檢查與函數調用開銷
- 14. 從緊密內部循環調用小函數的開銷? [C++]
- 15. 注入DLL中的調用函數
- 16. 調用DLL中的EXE函數
- 17. 從注入的DLL中調用函數
- 18. 怎樣的HtmlUnit調用DLL函數
- 19. 在OOP中調用函數很慢,還是開銷?
- 20. 動態調用並重用DLL函數
- 21. 系統調用開銷
- 22. 函數式編程中的開銷
- 23. 從actionscript調用.net dll函數
- 24. 從goroutine調用阻塞DLL函數?
- 25. 編程讀取可調用DLL函數
- 26. 從python中調用dll函數
- 27. 在dll delphi中調用函數
- 28. 如何在vbscript中調用DLL函數
- 29. C# - 從動態庫DLL調用函數
- 30. 從tcl通過twapi調用DLL函數
[DLL的架空]的可能重複(http://stackoverflow.com/questions/4030043/overhead-of-dll) –