Skip to main content

Τι είναι η κλήση της ουράς;

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

Η ύπαρξη μιας ουράς κλήσης οφείλεται σε μεγάλο βαθμό στον τρόπο με τον οποίο η στοίβα κλήσεων λειτουργεί μέσα στα περισσότερα προγράμματα υπολογιστών και αρχιτεκτονικές συστήματος.Η στοίβα, η οποία είναι σαν μια στοίβα πλακών, είναι μια πρώτη δομή δεδομένων.Όταν ονομάζεται συνάρτηση, υπορουτίνα ή διαδικασία, η διεύθυνση από την οποία γίνεται η κλήση, που ονομάζεται πλαίσιο στοίβας, αποθηκεύεται στη στοίβα.Αυτό σημαίνει ότι ένα πρόγραμμα που καλεί τη λειτουργία Α, η οποία στη συνέχεια καλεί τη λειτουργία Β, θα έχει δύο πλαίσια στοίβας, ένα για τη λειτουργία Β και ένα άλλο κάτω από αυτό για τη λειτουργία Α. Μετά τη λειτουργία Β ολοκληρώθηκε η εκτέλεση, το πλαίσιο της στοίβας έχει εμφανιστεί από την κορυφή τουΗ στοίβα και η εκτέλεση επιστρέφουν στη λειτουργία Α, η οποία έχει ξεπεράσει το πλαίσιο της από τη στοίβα όταν τελειώνει, τελικά επιστρέφοντας τον έλεγχο του προγράμματος στο σημείο από το οποίο ονομάστηκε αρχικά η πρώτη λειτουργία.Μια συνάρτηση χρησιμοποιεί άμεσα την τιμή επιστροφής μιας άλλης λειτουργίας ως τα δεδομένα που θα αποσταλούν στον κωδικό κλήσης.Στο παραπάνω παράδειγμα, εάν η συνάρτηση A κλήσεων συνάρτηση Β απευθείας με τη δήλωση επιστροφής, τότε έχει σχηματιστεί μια κλήση ουράς.Μέσα στη στοίβα κλήσεων, αντί να διαθέτουμε πλαίσιο στοίβας και για τις δύο λειτουργίες Α και Β, η λειτουργία Β θα λάβει τη διεύθυνση επιστροφής από το πλαίσιο στοίβας της λειτουργίας Α και η λειτουργία Α θα εμφανιστεί και θα διατεθεί, πράγμα που σημαίνει ότι η λειτουργία Β θα μεταφέρει την τιμή επιστροφής της απευθείας πίσωστην τοποθεσία που ονομάζεται Λειτουργία Α χωρίς Πρώτα πρέπει να περάσει τον έλεγχο πίσω στη λειτουργία Α. Αυτό αυξάνει την ταχύτητα των κλήσεων λειτουργιών καθώς και βοηθώντας να μειωθεί η ποσότητα των πληροφοριών στη στοίβα.τους μια πολύ ελκυστική επιλογή για αναδρομικές λειτουργίες.Μια αναδρομική λειτουργία είναι αυτή που καλεί επανειλημμένα να υπολογίσει μια τιμή, όπως μπορεί να συμβαίνει όταν διασχίζει μια δομή δεδομένων λίστας.Δεν δημιουργούνται πρόσθετα πλαίσια στοίβας για τις ένθετες κλήσεις λειτουργίας, έτσι ώστε πολύ βαθιά επίπεδα επανάληψης να μπορούν να εκτελεστούν με ασφάλεια χωρίς την άμεση απειλή για υπερχείλιση στοίβας και πιθανή τερματισμό του προγράμματος.