Διαφορά μεταξύ της στατικής και της δυναμικής σύνδεσης

Συγγραφέας: Laura McKinney
Ημερομηνία Δημιουργίας: 1 Απρίλιος 2021
Ημερομηνία Ενημέρωσης: 1 Ιούλιος 2024
Anonim
Θεωρία - Δυναμική ενέργεια - Δυναμικό - Διαφορά δυναμικού
Βίντεο: Θεωρία - Δυναμική ενέργεια - Δυναμικό - Διαφορά δυναμικού

Περιεχόμενο


Η δέσμευση σύνδεσης ενός «ορισμού λειτουργίας» με μια «κλήση λειτουργίας» ή μια συσχέτιση μιας «τιμής» με μια «μεταβλητή», ονομάζεται «δέσμευση». Κατά τη διάρκεια της σύνταξης, κάθε "ορισμός της λειτουργίας" δίνεται σε μια διεύθυνση μνήμης. μόλις ολοκληρωθεί η κλήση λειτουργίας, ο έλεγχος της εκτέλεσης του προγράμματος μεταβαίνει σε εκείνη τη διεύθυνση μνήμης και ο κωδικός λειτουργίας που έχει αποθηκευτεί σε αυτήν την τοποθεσία εκτελείται, αυτό είναι η δέσμευση της "κλήσης λειτουργίας" στον "ορισμό λειτουργίας". Η δέσμευση μπορεί να ταξινομηθεί ως «στατική δέσμευση» και «δυναμική δέσμευση».

Αν είναι ήδη γνωστό πριν από το χρόνο εκτέλεσης, ποια λειτουργία θα καλείται ή ποια τιμή είναι κατανεμημένη σε μια μεταβλητή, τότε είναι μια «στατική δέσμευση». αν πρόκειται να γνωρίζουμε κατά τη διάρκεια εκτέλεσης, τότε ονομάζεται «δυναμική δέσμευση».

  1. Συγκριτικό διάγραμμα
  2. Ορισμός
  3. Βασικές διαφορές
  4. συμπέρασμα

Συγκριτικό διάγραμμα:

Βάση σύγκρισηςΣτατική δέσμευσηΔυναμική σύνδεση
Εκδήλωση συμβάντοςΤα συμβάντα που συμβαίνουν κατά τον χρόνο σύνταξης είναι "Στατική δέσμευση".
Τα συμβάντα που συμβαίνουν κατά το χρόνο εκτέλεσης είναι "Δυναμική δέσμευση".
ΠληροφορίεςΌλες οι πληροφορίες που απαιτούνται για την κλήση μιας λειτουργίας είναι γνωστές στον χρόνο σύνταξης.Όλες οι πληροφορίες πρέπει να καλέσουν μια συνάρτηση έρχονται να γνωρίσουν την ώρα εκτέλεσης.
ΠλεονέκτημαΑποδοτικότητα.Ευκαμψία.
χρόνοςΓρήγορη εκτέλεση.Αργή εκτέλεση.
εναλλακτικό όνομαΠρώιμη δέσμευση.Καθυστερημένη σύνδεση.
ΠαράδειγμαΥπερφόρτωση κλήσης λειτουργίας, υπερφόρτωση χειριστών.Εικονική συνάρτηση σε C ++, υπερδιέγερες μέθοδοι στη java.

Ορισμοί της στατικής δέσμευσης

Όταν ο μεταγλωττιστής αναγνωρίζει όλες τις πληροφορίες που απαιτούνται για την κλήση μιας συνάρτησης ή όλες οι τιμές των μεταβλητών κατά τη διάρκεια της μεταγλώττισης, ονομάζεται "στατική δέσμευση". Δεδομένου ότι όλες οι απαιτούμενες πληροφορίες είναι γνωστές πριν από το χρόνο εκτέλεσης, αυξάνει την απόδοση του προγράμματος και επίσης αυξάνει την ταχύτητα εκτέλεσης ενός προγράμματος.


Η στατική δέσμευση καθιστά ένα πρόγραμμα πολύ αποτελεσματικό, αλλά μειώνει την ευελιξία του προγράμματος, καθώς οι "τιμές της μεταβλητής" και "κλήση λειτουργίας" είναι προκαθορισμένες στο πρόγραμμα. Η στατική δέσμευση εφαρμόζεται σε ένα πρόγραμμα κατά τη στιγμή της κωδικοποίησης.

Η υπερφόρτωση μιας συνάρτησης ή ενός χειριστή είναι το παράδειγμα του πολυμορφισμού της μεταγλώττισης, δηλαδή της στατικής σύνδεσης.

Εφαρμογή της στατικής σύνδεσης στην C ++ με ένα παράδειγμα υπερφορτώσεων

#περιλαμβάνω χρησιμοποιώντας τον χώρο ονομάτων std. τάξη υπερφόρτωσης {int a, b; public: int load (int x) {// πρώτη φόρτιση () λειτουργία. a = x; cout << "Η τιμή του x είναι" <funct (); // Η παραπάνω δήλωση καθορίζει ποια λειτουργία ταξινόμησης πρέπει να χρησιμοποιηθεί. p = & d1. // Ο δείκτης του δείκτη αλλάζει. p-> funct (); // Η παραπάνω δήλωση καθορίζει ποια λειτουργία ταξινόμησης πρέπει να χρησιμοποιηθεί. p = & d2. // Αλλάζει πάλι ο δείκτης. p-> funct (); // Η παραπάνω δήλωση καθορίζει ποια λειτουργία ταξινόμησης πρέπει να χρησιμοποιηθεί. επιστροφή 0? }}

Εδώ η τιμή του δείκτη αλλάζει καθώς το πρόγραμμα εκτελείται και η τιμή του δείκτη αποφασίζει ποια λειτουργία της κλάσης θα καλείται. Έτσι, εδώ, οι πληροφορίες παρέχονται κατά το χρόνο εκτέλεσης, παίρνει το χρόνο να δεσμεύσει τα δεδομένα που επιβραδύνουν την εκτέλεση.


  1. Τα συμβάντα που συμβαίνουν κατά τον χρόνο σύνταξης, όπως ένας κωδικός λειτουργίας συσχετίζεται με μια κλήση λειτουργίας ή την εκχώρηση τιμής σε μια μεταβλητή, ονομάζονται στατικές / πρώιμες βιβλιοδεσίες. Αντίθετα, όταν αυτές οι εργασίες ολοκληρώνονται κατά τη διάρκεια του χρόνου εκτέλεσης, καλούνται δυναμική / καθυστερημένη σύνδεση.
  2. Η «απόδοση» αυξάνεται στη στατική δέσμευση, καθώς συγκεντρώνονται όλα τα δεδομένα πριν από την εκτέλεση. Αλλά στη δυναμική δέσμευση, τα δεδομένα αποκτώνται κατά το χρόνο εκτέλεσης, ώστε να μπορέσουμε να αποφασίσουμε ποια τιμή να εκχωρήσουμε μια μεταβλητή και ποια λειτουργία να επικαλείται κατά το χρόνο εκτέλεσης, γεγονός που καθιστά την εκτέλεση 'ευέλικτη'.
  3. Η «στατική δέσμευση» καθιστά την εκτέλεση ενός προγράμματος «ταχύτερη», καθώς όλα τα δεδομένα που απαιτούνται για την εκτέλεση ενός προγράμματος είναι γνωστά πριν από την εκτέλεση. Στο 'δυναμικό δεσμευτικό' δεδομένα που απαιτούνται για την εκτέλεση ενός προγράμματος είναι γνωστά στον μεταγλωττιστή κατά τη στιγμή της εκτέλεσης που παίρνει το χρόνο να δεσμεύσει τις τιμές με τα αναγνωριστικά. ως εκ τούτου, κάνει την εκτέλεση του προγράμματος πιο αργή.
  4. Η στατική δέσμευση ονομάζεται επίσης πρώιμη βιβλιοδεσία επειδή ο κώδικας λειτουργίας συσχετίζεται με την κλήση λειτουργίας κατά τη διάρκεια της μεταγλώττισης, η οποία είναι παλαιότερη από τη δυναμική δέσμευση στην οποία ο κώδικας λειτουργίας συσχετίζεται με την κλήση λειτουργίας κατά τη διάρκεια εκτέλεσης, επομένως ονομάζεται επίσης καθυστέρηση δέσμευσης.

Συμπέρασμα:

Παρόλα αυτά, καταλήγουμε στο συμπέρασμα ότι όταν έχουμε προηγούμενη γνώση των τιμών μεταβλητών και λειτουργικών κλήσεων, εφαρμόζουμε τη στατική δέσμευση. Αντίθετα, στη δυναμική δέσμευση, παρέχουμε όλες τις πληροφορίες κατά την εκτέλεση.