静的バインディングと動的バインディングの違い
![プログラミング言語での静的バインディングと動的バインディング](https://i.ytimg.com/vi/8aWvIwtnK4Q/hqdefault.jpg)
コンテンツ
「関数定義」の「関数呼び出し」への関連付け、または「値」の「変数」への関連付けを「バインド」と呼びます。コンパイル中、すべての「関数定義」にはメモリアドレスが与えられます。関数呼び出しが完了するとすぐに、プログラム実行の制御がそのメモリアドレスに移動し、実行された場所に保存されている関数コードを取得します。これは「関数呼び出し」を「関数定義」にバインドしますバインディングは、「静的バインディング」と「動的バインディング」に分類できます。
実行前に既知の場合、どの関数が呼び出されるか、変数に割り当てられる値は、「静的バインディング」です。実行時に知るようになると、「動的バインディング」と呼ばれます。
- 比較表
- 定義
- 主な違い
- 結論
比較表:
比較の根拠 | 静的バインディング | 動的バインディング |
---|---|---|
イベント発生 | コンパイル時に発生するイベントは「静的バインディング」です。 | 実行時に発生するイベントは「動的バインド」です。 |
情報 | 関数を呼び出すために必要なすべての情報は、コンパイル時に既知です。 | 関数を呼び出すためのすべての情報は、実行時に知る必要があります。 |
利点 | 効率。 | 柔軟性。 |
時間 | 高速実行。 | 実行が遅い。 |
代替名 | 早期バインディング。 | 遅延バインディング。 |
例 | オーバーロードされた関数呼び出し、オーバーロードされた演算子。 | C ++の仮想関数、javaのオーバーライドされたメソッド。 |
静的バインディングの定義
コンパイラーは、コンパイル時に関数または変数のすべての値を呼び出すために必要なすべての情報を認識すると、「静的バインディング「。実行前に必要なすべての情報がわかっているため、プログラムの効率が向上し、プログラムの実行速度も向上します。
静的バインディングはプログラムを非常に効率的にしますが、「変数の値」と「関数呼び出し」がプログラムで事前に定義されているため、プログラムの柔軟性が低下します。静的バインディングは、コーディング時にプログラムに実装されます。
関数または演算子のオーバーロードは、コンパイル時のポリモーフィズム、つまり静的バインディングの例です。
オーバーロードの例によるC ++での静的バインディングの実装
#含める ここでは、プログラムの実行中にポインターの値が変化し、ポインターの値によってどのクラスの関数が呼び出されるかが決まります。そのため、ここでは実行時に情報が提供されますが、データのバインドに時間がかかり、実行が遅くなります。 ただし、変数の値と関数呼び出しの事前知識がある場合、静的バインディングを適用すると結論付けます。逆に、動的バインディングでは、実行時にすべての情報を提供します。
結論: