3

posixと一般的な技術的ソフトウェア開発の言葉で。純粋にpython(cythonやcコンパイルされたライブラリではない)のimportモジュールが動的リンクを構成していますか?Pythonのインポートは動的リンクとみなされますか?

+0

また、[LGPL](https://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License)に関する動的リンクとも考えられますか?私はそれがそうであると信じます、しかしIANAL。 –

+0

「ダイナミックリンク」の定義に応じてはい、いいえ。通常の意味では、動的リンクは、スクリプトではなく、コンパイルされたプログラム(ELF実行可能ファイルなど)のリンクについてのみです。 – Bakuriu

+0

LGPLがCスタイルのリンクを意味するのか、まったく異なるのかについての議論があると確信しています。 –

答えて

4

いいえ、純粋なPythonモジュールの読み込みは、動的リンクの形式とはみなされません。

従来のダイナミックリンキングでは、マシンコードを新しいメモリチャンクにロードし、複数の実行可能プロセスにアクセス権を与えることができます(ダイナミックリンクライブラリはを一度ロードするだけで、、仮想メモリが残ります)。リンカは実行時に実行可能ライブラリと動的ライブラリを接続します。

一方、Pythonモジュールをロードすると、モジュールのバイトコードがPythonプロセス自体にロードされます(この時点でバイトコードキャッシュが利用できない場合、Pythonはソースコードをコンパイルします)。ロードされたモジュールは、プロセス間でを共有していないです。翻訳は行われません。バイトコードを実行すると、インタープリタ内の既存のコードがすべて相互作用できる新しいオブジェクトがPythonヒープに生成されます。

このプロセスにはリンカーは含まれていません。別個のメモリはありません。OSには、モジュールがPythonプロセスメモリの一部であるため、管理するメモリのセクションはありません。

関連する問題