2011-01-19 116 views
4

如果通過dlopen和dlclose機制使用共享庫(或DLL),並且共享庫創建的內存來自堆的某些全局變量,那麼當調用dlclose時,這些變量和內存會發生什麼?當dlclose被調用時,共享庫中的全局變量會發生什麼變化?

如果在同一個進程中,再次調用dlopen,那麼行爲會是什麼?

+0

全局變量do * not *通常來自堆。你的問題似乎使用無效的假設。 – 2011-01-19 06:57:34

+0

@僱用的俄羅斯人,我有一個全局指針變量,我從堆中分配內存。會發生什麼?另外,如果一個正常的靜態全局變量存在,那會發生什麼? – Jay 2011-01-19 07:09:05

回答

8

如果dlclose減少引用計數爲零,該庫實際上是卸載,任何未來的圖書館應該重新加載在圖書館與靜態存儲所有變量重置爲初始值。

但是,如果庫被多次打開,除最終調用dlclose之外的所有內容都將減少引用計數。有時候,一個庫是否被多次打開可能並不明顯,因爲它可能作爲其他庫的依賴被加載,除非它是程序本地的模塊,所以依靠它可能不是一個好主意在這個「重置」行爲。

就業俄語說:

即使庫dlopen() ED和dlclose()ð只有一次,而不是別的東西,引用符號從它的行爲(通過dlsym())的依賴也將增加引用計數(並使庫不可卸載);至少在Linux上。

我不知道這個信息是否準確與否。將來,請將新信息發佈爲評論或新答案,而不是編輯其他人的答案。如果你只是編輯他人的答案,你可以讓他們對你答案的正確性負責,他們可能不需要答案。

相關問題