Κεφάλαιο 2 | Ενότητα1 | Ερωτήσεις επισκόπησης | Επόμενο|Προηγούμενο|Λεξικό όρων

Αρχιτεκτονική στοίβας

   Οι στοίβα είναι μια βασική δομή δεδομένων που χρησιμοποιείται στην αρχιτεκτονική υπολογιστών και στον προγραμματισμό.

Η στοίβα είναι μια λίστα από δεδομένα, τα οποία είναι συνήθως λέξεις ή bytes, με τη διαφορά πως μόνο ένα στοιχείο δεδομένων μπορεί να προστίθεται ή να αφαιρείται από τη μία άκρη της στοίβας κάθε φορά. Η άκρη αυτή της στοίβας ονομάζεται κορυφή της στοίβας, ενώ η άλλη άκρη ονομάζεται πυθμένας τη στοίβας. Ολόκληρη η δομή συνήθως αναφέρεται σαν “στοίβα ώθησης προς τα κάτω” (pushdown stack).

Για να κατανοήσετε καλύτερα τη λογική που ακολουθείται στη δημιουργία και λειτουργία της στοίβας, μπορείτε να φανταστείτε ένα σωρό από δίσκους σε ένα εστιατόριο self-service. Οι πελάτες παίρνουν δίσκους από την κορυφή της στοίβας και οι καθαροί δίσκοι τοποθετούνται στην κορυφή της στοίβας. Με τον ίδιο τρόπο εισάγονται και εξάγονται τα δεδομένα από τη στοίβα. Δηλαδή, μόνο η μία άκρη της στοίβας χρησιμοποιείται για την εισαγωγή και εξαγωγή των δεδομένων.

Η στοίβα αποκαλείται επίσης στοίβα τελευταίο μέσα-πρώτο έξω (last-in first-out, LIFO). Η στοίβα ονομάζεται έτσι για να περιγράψει τον τύπο του μηχανισμού εισόδου-εξόδου που χρησιμοποιείται στη στοίβα: το τελευταίο στοιχείο δεδομένων που εισάγεται στη στοίβα είναι και το πρώτο το οποίο εξάγεται όταν αρχίζει η εξαγωγή των δεδομένων. Οι όροι ώθηση (push) και εξαγωγή (pop) χρησιμοποιούνται για να περιγράψουνε την τοποθέτηση ενός νέου στοιχείου δεδομένων στη στοίβα και την απομάκρυνση ενός στοιχείου δεδομένων από τη στοίβα, αντίστοιχα.

Μία στοίβα μπορεί να αποθηκευτεί στην κύρια μνήμη ενός υπολογιστή, όπου τα διαδοχικά στοιχεία τη στοίβας βρίσκονται σε διαδοχικές θέσεις μνήμης. Το πρώτο στοιχείο που εισάγεται στη στοίβα αποθηκεύεται στη διεύθυνση μνήμης «πυθμένας» (BOTTOM) και τα διαδοχικά στοιχεία τοποθετούνται σε περιοχές της μνήμης με μικρότερη ή μεγαλύτερη διεύθυνση, ανάλογα με τη σχεδίαση της στοίβας. Το στοιχείο που εισάγεται τελευταίο σε μία στοίβα και αποτελεί την κορυφή της στοίβας, ονομάζεται «στοιχείο κορυφής» (TOP).

Παράδειγμα:

Έστω ότι σε μια δομή στοίβας πρόκειται να αποθηκευτούν διαδοχικά τρία στοιχεία με τιμές -50, +5 και -150 αντίστοιχα και κάθε στοιχείο καταλαμβάνει 4 bytes. Εάν ο πυθμένας βρίσκεται στη διεύθυνση 1000, σε ποιες διευθύνσεις θα αποθηκευτούν αυτά τα τρία στοιχεία στην περίπτωση που:
α) τα στοιχεία αποθηκεύονται διαδοχικά σε θέσεις μνήμης με μικρότερη διεύθυνση,
β) τα στοιχεία αποθηκεύονται διαδοχικά σε θέσεις μνήμης με μεγαλύτερη διεύθυνση;

Απάντηση:

Το στοιχείο -50, το οποίο εισάγεται πρώτο στη στοίβα, αποθηκεύεται στον πυθμένα της στοίβας, δηλαδή στη διεύθυνση 1000. Τα επόμενα στοιχεία εισάγονται στη στοίβα ανάλογα με το αν η διεύθυνση του δείκτη στοίβας μειώνεται ή αυξάνεται, ως εξής:
α) Στην περίπτωση που τα στοιχεία αποθηκεύονται διαδοχικά σε θέσεις μνήμης με μικρότερη διεύθυνση, το στοιχείο με τιμή +5 θα αποθηκευτεί στη διεύθυνση 996 και το στοιχείο με τιμή -150 θα αποθηκευτεί στη διεύθυνση 992. Η τελική μορφή της στοίβας απεικονίζεται στο σχήμα που ακολουθεί.

β) Στην περίπτωση που τα στοιχεία αποθηκεύονται διαδοχικά σε θέσεις μνήμης με μεγαλύτερη διεύθυνση, το στοιχείο με τιμή +5 θα αποθηκευτεί στη διεύθυνση 1004 και το στοιχείο με τιμή -150 θα αποθηκευτεί στη διεύθυνση 1008. Η τελική μορφή της στοίβας απεικονίζεται στο σχήμα που ακολουθεί.