共享庫中動態鏈接的全局變量和靜態變量
加載時動態鏈接
當應用程式透過載入時連結動態連結到模組 A時,作業系統會載入DLL的程式碼和資料進入應用程式的位址空間。應用程式有自己的 A 全域變數和靜態變數的副本,載入到其資料段中。
運行時動態鏈接
透過運行時動態鏈接,應用程式僅在需要時加載 DLL 的程式碼和資料。應用程式不會獲得自己的 A 全域變數和靜態變數的副本。相反,它直接從載入的 DLL 中存取它們。
可見性和範圍
在所有情況下,靜態變數僅在定義它們的模組內可見。然而,全域變數有不同的可見性規則:
Windows:
類 Unix 系統:
多個應用程式
如果多個應用程式使用模組A 和B,則會為每個應用程式建立其全域變數和靜態變數的單獨副本,即使它們位於不同的進程中也是如此。DLL 對應用程式全域變數的存取
DLL 無法直接存取它們所連結的應用程式的全域變數。為了操作應用程式的全域變量,DLL 必須使用應用程式提供的導出函數。結論
動態連結共享中全域變數和靜態變數的行為Windows 和類別 Unix 系統之間的函式庫有所不同。 Windows 強制模組之間的全域變數嚴格分離,而類別 Unix 系統允許在載入時動態連結期間共用全域變數。一般來說,建議在使用共享庫時避免使用全域變數。以上是全域變數和靜態變數在不同作業系統的動態連結共享庫中的行為如何?的詳細內容。更多資訊請關注PHP中文網其他相關文章!