左(コンピュータープログラム) – ウィキペディア
aの下 リンカ また バインダー (また、「Bindelader」)は、個々のプログラムモジュールを実行可能なプログラム(Connects)にコンパイルしたコンピュータープログラムを理解することが理解されています。左はIBMの主要なコンピューターシステムにあります リンケージエディター 呼び出し(英語)。 [初め]
ほとんどのプログラムには、他のプログラムで使用できるコンポーネントまたはモジュールが含まれています。関数を備えたいくつかのコンパイルされたモジュール(そのように呼ばれました オブジェクトファイル )機能ライブラリに移動できます( プログラムライブラリ )要約する。対応する関数が必要な場合、コードは左のプログラムにメインプログラムに追加されます。
別のプログラムでプログラムモジュールを使用できるようにするには、モジュールの関数と変数のシンボリックアドレスをメモリアドレスに変換する必要があります。左はこのタスクを引き継ぎます。リンクプロセスはコンパイル後に行われ、通常、プログラムを作成するための最後のステップです。一般に、静的左と動的な左に区別が行われます。
静的左 通常、プログラムの開発の終了時に行われるプロセスです。結果は、完全に組み立てられたプログラムです。これは、完全な静的リンクプログラムの単一ファイルで構成されています。
静的左の場合、アプリケーションのプログラムモジュール解像度は、開発時に1回実行されます。 ダイナミックな左 、これはこの用語で毎回起こります。これは、プログラムモジュールの提供には適用されないため、左の静的左になると、アプリケーションの移植性が向上することです。 B.は、アプリケーションが自分で運ぶため、オペレーティングシステムに依存しています。したがって、プログラムをインストールする必要はありません。 [2] 短所は、他のプログラムではプログラムモジュールを使用できないため、サブモジュールの改善バージョンが発行された場合にアプリケーション全体をコンパイルして去る必要がないため、潜在的に高いストレージ要件です。 [3]
これらの不利な点のため、UNIXのようなオペレーティングシステムの下の一部のCライブラリは、しばしば静的左をサポートしなくなることがよくあります。 [3] たとえば、GLIBCは、ユーザー認証に影響を与えるモジュール内にダイナミックな残りを強制します。これらのモジュールを使用するプログラムは、GLIBCの適切な「ランタイムバージョン」の存在に常に依存します。
また、プログラムが実際に実行されるまで、機能的な名前と変数の名前を嫌うこともできます。この場合、ダイナミックな左について語っています。オペレーティングシステムによっては、これは以上に充電することによって起こります 動的ライブラリ (としても知られている ダイナミックリンクライブラリ(DLL) また 共有ライブラリ )またはプログラムライブラリからのサブルーチンのターゲット充電。これには、ライブラリまたはプログラムを簡単に交換できるという利点があり、呼び出しプログラムが小さくなり、いくつかのプログラムが同じコンポーネントを使用した場合にメモリが1回だけ必要です。欠点は、正しいバージョンに適切なライブラリがインストールされていることを確認する必要があることです(例:DLL競合を参照)。リロードされたライブラリは、多くの場合、プラグインと呼ばれます。
静的リンクタイプと動的リンクタイプの混合形式が通常のケースです。特定のサブプログラムは呼び出しプログラムに対して静的であり、他のサブプログラムは動的にリロードされます。
過負荷 [ 編集 | ソーステキストを編集します ]
「オーバーロード」は、内部改名(英語)によって実現されるパラメーター選択に応じて、同じ識別子を持つサブプログラムを定義するために使用されると理解されています。 マングリングという名前 )。以下の例は、C ++またはJavaでのみ可能です。 いいえ しかし、純粋なCでは、関数の過負荷が提供されず、要求しようとすると、翻訳エラーがトリガーされます。
関数 void関数(int x);
まったく異なるものとはまったく異なります void関数(float x);
。どちらの関数も異なる実装を持ち、オブジェクトファイルに異なる名前があり、同じ名前を持つこと以外に、お互いに関係がありません。したがって、機能名のみが過負荷になります。
理解と翻訳者の問題は次のような見解です。
ここで、翻訳者はタイプを変換するかどうかを決定する必要があります( キャスト ) 後 int
または後 浮く
実行され、関数呼び出しの対応するバリアント。最初のケースは明らかですが、翻訳者が使用していることにはいくつかのことがあります。プログラマーは、マシンコードの地下で何が起こるかわかりません。そのような場合、一部の翻訳者は、おそらく正しいと思われる(特定のケースで間違っている可能性がある)を選択します。たとえば、GNUなどの翻訳者は、ユーザーから決定を要求するためにエラーを費やす傾向があります。その後、彼はスペルのように選択する必要があります 関数((float)(y));
タイプ変換によって設定されています。
一般に、過負荷の可能性を自由に使用することはできませんが、異なる数のパラメーターを持つサブプログラムのバリエーションなどの大きな違いについてのみ使用することをお勧めします。しかし、ここでも、デフォルトの引数を持つパラメーターとの組み合わせは、刺激につながります。ハンド付きのパラメーター感受性関数呼び出しは、基本クラス(継承)から導出できないさまざまなタイプから安全であると説明できます。いずれにせよ、翻訳者はポインターのポイントをチェックし、エラーを報告するか、正確なサブルーチンを使用します。
クラス クラス。 ; クラス classb ; 関数 ( クラス a * ); //から明確に区別されます 関数 ( クラス b * );
ClassaとClassBが互いに派生していない場合。
上書きします [ 編集 | ソーステキストを編集します ]
「オーバーロード」と区別される「上書き」は、基本クラスのメソッド(つまり、サブプログラム)が同じ名前の同じ名前のメソッドでカバーされ、等しくパラメーター化された場合、プログラムシーケンスでそれに応じて反応する動的包帯です。用語では、データのインスタンスに対応する方法が呼び出されます。これにより、仮想的な方法は、オブジェクト指向のプログラミングを実装する基本的な概念を作成できます。
左のプロセスでは、単一の大きな非階層的な一般名スペースが作成されます。これは、多くの場合、名前が大規模または非常に分岐したプロジェクトとの競合につながります。これらの場合はそうです 弱いリンク 通常のリンク順序でどのモジュールが使用されるかを決定します。次のようなプログラミング言語B. C ++階層的に構築された名前に関するモジュールコンテンツに対処することにより、問題を解決します。ただし、さまざまなバージョンにライブラリが存在するという問題は未解決のままです。左の時点で、問題は左翼ライブラリに異なる検索パスが与えられるという点でのみ解決できます。問題の各ライブラリは指定とは異なりますが、同じ記号が利用可能であるため、コンテンツの点では不可欠です。最初の静的左翼の後、使用されたライブラリはその名前に基づいてそれ以降に呼ばれることができるため、問題は問題ではありません。
- レオン・プレッサー、ジョン・R・ホワイト: リンカーとローダー 。の: ACMコンピューティング調査 。 バンド 4 、3(9月)、1972年、ISSN 0360-0300 、 S. 149–167 ( berkeley.edu [PDF; 1.3 MB ])。
- ジョン・R・レヴァイン: リンカーとローダー 。 Morgan-Kauffman、San Francisco 1999、ISBN 1-55860-496-0。
- スタンリー・B・リップマン: C ++最初 。 Addison-Wesley Longman、Amsterdam 2005、ISBN 0-201-72148-1。
- ランダルE.ブライアント、デビッドR.オハラロン: コンピューターシステム:プログラマーの視点(第3版、特に第7章) 。ピアソン、ボストン2016、ISBN 978-0-13-409266-9。
- ↑ IBM Corporation(HRSG。): オペレーティングシステム360、リンケージエディター、プログラムロジックマニュアル 。ニューヨーク1967。
- ↑ メインメモリの章、フィルム6 (PDF)Informatik.uni-ulm.de オペレーティングシステム – メインコースでの講義
- ↑ a b ウルリッヒ・ドレッパー: 有害と見なされる静的リンク。 Redhat.com、アーカイブ オリジナル 午前 2004年12月21日 ; 2012年1月13日にアクセス (英語): ” 静的リンクには利点があると考える(または主張する)人々がまだ多すぎます。これは決して事実ではなく、決してそうではありません。 […] 「
Recent Comments