静的バインディングと動的バインディングの違い

著者: Laura McKinney
作成日: 1 4月 2021
更新日: 1 J 2024
Anonim
プログラミング言語での静的バインディングと動的バインディング
ビデオ: プログラミング言語での静的バインディングと動的バインディング

コンテンツ


「関数定義」の「関数呼び出し」への関連付け、または「値」の「変数」への関連付けを「バインド」と呼びます。コンパイル中、すべての「関数定義」にはメモリアドレスが与えられます。関数呼び出しが完了するとすぐに、プログラム実行の制御がそのメモリアドレスに移動し、実行された場所に保存されている関数コードを取得します。これは「関数呼び出し」を「関数定義」にバインドしますバインディングは、「静的バインディング」と「動的バインディング」に分類できます。

実行前に既知の場合、どの関数が呼び出されるか、変数に割り当てられる値は、「静的バインディング」です。実行時に知るようになると、「動的バインディング」と呼ばれます。

  1. 比較表
  2. 定義
  3. 主な違い
  4. 結論

比較表:

比較の根拠静的バインディング動的バインディング
イベント発生コンパイル時に発生するイベントは「静的バインディング」です。
実行時に発生するイベントは「動的バインド」です。
情報関数を呼び出すために必要なすべての情報は、コンパイル時に既知です。関数を呼び出すためのすべての情報は、実行時に知る必要があります。
利点効率。柔軟性。
時間高速実行。実行が遅い。
代替名早期バインディング。遅延バインディング。
オーバーロードされた関数呼び出し、オーバーロードされた演算子。C ++の仮想関数、javaのオーバーライドされたメソッド。

静的バインディングの定義

コンパイラーは、コンパイル時に関数または変数のすべての値を呼び出すために必要なすべての情報を認識すると、「静的バインディング「。実行前に必要なすべての情報がわかっているため、プログラムの効率が向上し、プログラムの実行速度も向上します。


静的バインディングはプログラムを非常に効率的にしますが、「変数の値」と「関数呼び出し」がプログラムで事前に定義されているため、プログラムの柔軟性が低下します。静的バインディングは、コーディング時にプログラムに実装されます。

関数または演算子のオーバーロードは、コンパイル時のポリモーフィズム、つまり静的バインディングの例です。

オーバーロードの例によるC ++での静的バインディングの実装

#含める 名前空間stdを使用します。クラスオーバーロード{int a、b; public:int load(int x){//最初のload()関数。 a = x; cout << "xの値は" <funct(); //上記のステートメントは、どのクラス関数を呼び出すかを決定します。 p =&d1; //ポインタの値が変わります。 p-> funct(); //上記のステートメントは、どのクラス関数を呼び出すかを決定します。 p =&d2; //再びポインタの値が変わります。 p-> funct(); //上記のステートメントは、どのクラス関数を呼び出すかを決定します。 0を返します。 }

ここでは、プログラムの実行中にポインターの値が変化し、ポインターの値によってどのクラスの関数が呼び出されるかが決まります。そのため、ここでは実行時に情報が提供されますが、データのバインドに時間がかかり、実行が遅くなります。


  1. 関数コードが関数呼び出しまたは変数への値の割り当てに関連付けられているなど、コンパイル時に発生するイベントは、静的/初期バインディングと呼ばれます。それどころか、実行時にこれらのタスクが完了すると、それらは動的/遅延バインディングと呼ばれます。
  2. 実行前にすべてのデータが収集されるため、静的バインディングの「効率」が向上します。ただし、動的バインディングでは、実行時にデータが取得されるため、変数に割り当てる値と実行時に呼び出す関数を決定できるため、実行が「柔軟」になります。
  3. 「静的バインディング」は、プログラムの実行に必要なすべてのデータが実行前にわかっているため、プログラムの実行を「高速」にします。 「動的バインディング」では、プログラムの実行に必要なデータは、実行時にコンパイラーに認識されます。これは、値を識別子にバインドするのに時間がかかります。したがって、プログラムの実行が遅くなります。
  4. 静的バインディングは、関数コードがコンパイル時に関数呼び出しに関連付けられるため、早期バインディングとも呼ばれます。これは、実行時に関数コードが関数呼び出しに関連付けられる動的バインディングよりも早いため、遅延バインディングとも呼ばれます。

結論:

ただし、変数の値と関数呼び出しの事前知識がある場合、静的バインディングを適用すると結論付けます。逆に、動的バインディングでは、実行時にすべての情報を提供します。