Diferența dintre legarea statică și cea dinamică

Autor: Laura McKinney
Data Creației: 1 Aprilie 2021
Data Actualizării: 17 Mai 2024
Anonim
Java Interview 04 - Static Binding Vs Dynamic Binding
Video: Java Interview 04 - Static Binding Vs Dynamic Binding

Conţinut


Asocierea unei „definiții a funcției” la un „apel de funcție” sau o asociere a unei „valori” la o „variabilă” se numește „legare”. În timpul compilării, fiecărei „definiții a funcției” i se oferă o adresă de memorie; de îndată ce apelul funcțional este finalizat, controlul execuției programului se mută pe adresa de memorie și se execută codul funcției stocat la locația respectivă, aceasta este legarea „apelului funcțional” la „definiția funcției”. Legarea poate fi clasificată ca „legare statică” și „legare dinamică”.

Dacă se știa deja înainte de execuție, ce funcție va fi invocată sau ce valoare este atribuită unei variabile, atunci aceasta este o „legare statică”. dacă vine vorba de cunoaștere la runtime, atunci se numește „legare dinamică”.

  1. Diagramă de comparație
  2. Definiție
  3. Diferențele cheie
  4. Concluzie

Diagramă de comparație:

Baza de comparațieLegarea staticăLegare dinamică
Evenimentul evenimentuluiEvenimentele care apar la momentul compilării sunt „Legarea statică”.
Evenimentele care apar la timpul de rulare sunt „Legare dinamică”.
informațieToate informațiile necesare pentru apelarea unei funcții sunt cunoscute la ora de compilare.Toate informațiile trebuie să apeleze o funcție să se cunoască în timpul rulării.
AvantajEficienţă.Flexibilitate.
TimpExecuție rapidă.Execuție lentă.
nume alternativLegare timpurie.Legare târzie.
ExempluApel funcțional supraîncărcat, operatori supraîncărcați.Funcție virtuală în C ++, metode suprasolicitate în java.

Definiția legării statice

Când compilatorul recunoaște toate informațiile necesare pentru a apela o funcție sau toate valorile variabilelor în timpul compilării, aceasta se numește „legare statică„. Deoarece toate informațiile solicitate sunt cunoscute înainte de execuție, crește eficiența programului și sporește, de asemenea, viteza de execuție a unui program.


Legarea statică face un program foarte eficient, dar declina flexibilitatea programului, deoarece „valorile variabilei” și „apelarea funcției” sunt predefinite în program. Legarea statică este implementată într-un program în momentul codării.

Supraîncărcarea unei funcții sau a unui operator sunt exemplul polimorfismului compilat în timp, adică legarea statică.

Implementarea legării statice în C ++ cu un exemplu de supraîncărcare

#include folosirea spațiului de nume std; suprasarcină de clasă {int a, b; public: int load (int x) {// funcția first load (). a = x; cout << "Valoarea lui x este" <funct (); // Declarația de mai sus decide ce funcții de clase trebuie invocate. p = & d1; // Vlaue de pointer se schimbă. p-> funct (); // Declarația de mai sus decide ce funcții de clase trebuie invocate. p = & d2; // Din nou, se schimbă vlaue a indicelui. p-> funct (); // Declarația de mai sus decide ce funcții de clase trebuie invocate. returnare 0; }

Aici, valoarea pointerului se schimbă pe măsură ce programul este în execuție, iar valoarea indicatorului decide ce funcție a clasei va fi invocată. Aici, informațiile sunt furnizate în timp de rulare, necesită timp pentru a lega datele care încetinesc execuția.


  1. Evenimentele care apar la un moment de compilare cum ar fi, un cod de funcție este asociat cu un apel de funcții sau o alocare de valoare unei variabile, se numesc legare statică / timpurie. Dimpotrivă, atunci când aceste sarcini sunt îndeplinite în timpul perioadei de rulare, ele sunt numite legare dinamică / târzie.
  2. „Eficiența” crește legarea statică, deoarece toate datele sunt colectate înainte de execuție. Dar, în legătură dinamică, datele sunt achiziționate la runtime, astfel încât să putem decide ce valoare să atribuim o variabilă și ce funcție trebuie invocată la runtime, ceea ce face ca execuția să fie „flexibilă”.
  3. „Legarea statică” face executarea unui program mai rapidă, deoarece toate datele necesare pentru a executa un program sunt cunoscute înainte de execuție. În datele „legării dinamice” necesare executării unui program sunt cunoscute compilatorul în momentul executării, ceea ce necesită timp pentru a lega valorile identificatorilor; prin urmare, face executarea programului mai lentă.
  4. Legarea statică este, de asemenea, numită legare timpurie, deoarece codul funcției este asociat cu apelul funcției în timpul compilării, care este mai devreme decât legarea dinamică, în care codul funcției este asociat cu apelul funcției în timpul perioadei de rulare, de aceea se numește și legare tardivă.

Concluzie:

Cu toate acestea, concluzionăm că, atunci când avem cunoștințe prealabile despre valorile apelurilor variabile și funcționale, aplicăm legarea statică. În schimb, în ​​Binding dinamic, oferim toate informațiile în momentul executării.