簡體   English   中英

DLL函數調用的開銷

[英]Overhead of DLL function call

從DLL調用函數時性能損失有多大? 加載DLL對我們來說不是問題,對highperf庫的調用次數不會很大。

大約一次調用多少指令/時鍾周期接管靜態庫調用?

我的答案是基於Linux / glibc / ELF動態鏈接器的工作原理,但我認為其他平台的總體答案是相同的:

第一次調用動態加載的符號與下一次調用之間存在差異。 第一次通話很昂貴,可能涉及很多周期。 所有其他電話或多或少都是1 - 2指令。

它的工作方式是鏈接器在Procedure Linkage Table中設置一個條目,該條目從Global Offset Table中獲取該外部函數的地址。 首先調用GOT的地址指向運行動態鏈接器的存根,以解析DLL中函數的實際地址。 這可能需要很多周期,但一旦完成一次,動態鏈接器將路徑GOT條目直接指向函數,因此下次調用PLT代碼時將直接調用該函數。

這是一個相當好的步驟來鏈接這個過程: http//www.technovelty.org/linux/pltgot.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM