2016-11-08 39 views
3

用posix和通用技術軟件開發的說法。單純的python(不是cython或c編譯的庫)模塊的import是否構成一個動態鏈接?python中的導入被認爲是動態鏈接?

+0

此外,它會被視爲關於[LGPL](https://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License)的動態鏈接?我相信它會是,但IANAL。 –

+0

是和否取決於「動態鏈接」的定義。按照通常的意義** no **,動態鏈接僅僅是關於編譯程序(例如ELF可執行文件)的鏈接,而不是腳本。 – Bakuriu

+0

我對此不太感興趣,因爲我確信LGPL是否意味着c風格的鏈接或者完全不同的觀點。 –

回答

4

不,加載純Python模塊不被視爲動態鏈接的一種形式。

傳統動態鏈接負載機器代碼到存儲器新塊,並且多個可執行的流程可以被給予訪問(動態鏈接庫只需要加載一次,虛擬內存取其餘的工作)。鏈接器在運行時連接可執行文件和動態庫。

另一方面,加載Python模塊將模塊的字節碼加載到Python進程本身(如果此時還沒有可用的字節碼緩存,Python將編譯源代碼)。加載的模塊是進程之間沒有共享。沒有翻譯必須發生,運行字節碼的結果會在Python堆中產生新的對象,解釋器中的所有現有代碼都可以與之交互。

沒有鏈接器參與這個過程,沒有單獨的內存,操作系統沒有單獨的內存部分進行管理,因爲模塊只是Python進程內存的一部分。