2017-07-06 45 views
-1

我有一個C++程序(實際上它是一個dll),它動態鏈接到另一個共享庫(python dll),這個程序有兩個使用場合。動態鏈接不會使用的共享庫會不會影響性能?

在場合A中,程序將對該動態鏈接的共享庫進行函數調用,而在場合B中,該程序不會。

我的問題是,如果我沒有鏈接到共享庫而專門爲場合B構建程序,與沒有實際使用共享庫的情況相比,我會獲得性能嗎?

+0

我在想「無關緊要的時間」..? – user2864740

回答

1

它確實取決於幾個因素:什麼操作系統,什麼共享庫以及應用程序實際執行的操作。也可能是共享庫的構建方式。

一般來說,這並不是一個特別大的懲罰,因爲共享庫需要加載並且使用與位置無關的尋址[PIC](PC相對,以及類似的)。這意味着共享庫僅在實際使用時加載,並且加載庫時沒有「工作」。這是操作系統設計人員和系統架構師所想的很多事情,因爲對於許多對性能非常敏感的應用程序(例如編譯器或Web服務),設計錯誤的共享庫系統會導致性能不佳。

當然,可以在構建共享庫時進行配置。至少使用PIC的這個方面,所以如果配置共享庫的構建的人/公司「想要」,它可能配置得不好並且比零效應更差。

爲此,您必須添加共享庫所做的任何初始化。精心設計的共享庫不需要「按需」或「懶惰」初始化,換句話說,只有在實際需要時才進行初始化。同樣,確切地說哪個庫的細節 - 包括它在構建時如何配置 - 可以在這裏產生巨大的差異。

在任何特定的用例中,唯一真正的方法是構建「with」和「without」額外的共享庫,並測量實際性能。