Stack vs Heap: Μάθετε τη διαφορά

Πίνακας περιεχομένων:

Anonim

Τι είναι μια στοίβα;

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

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

Σε αυτό το σεμινάριο, θα μάθετε,

  • Τι είναι το Stack;
  • Τι είναι ο σωρός;
  • Βασικές διαφορές μεταξύ Stack και Heap
  • Πλεονεκτήματα της χρήσης του Stack
  • Πλεονεκτήματα της χρήσης του Heap
  • Μειονεκτήματα της χρήσης του Stack
  • Μειονεκτήματα από τη χρήση του Heap
  • Πότε να χρησιμοποιήσετε το σωρό ή στοίβα;

Τι είναι ο σωρός;

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

Ο σωρός δεν διαχειρίζεται αυτόματα για εσάς και δεν διαχειρίζεται τόσο καλά από τη CPU. Είναι περισσότερο σαν μια ελεύθερη περιοχή μνήμης.

ΒΑΣΙΚΗ ΔΙΑΦΟΡΑ

  • Το Stack είναι μια γραμμική δομή δεδομένων, ενώ ο Heap είναι μια ιεραρχική δομή δεδομένων.
  • Η στοίβα μνήμης δεν θα γίνει ποτέ κατακερματισμένη, ενώ η μνήμη σωρού μπορεί να κατακερματιστεί καθώς τα τμήματα μνήμης κατανέμονται πρώτα και στη συνέχεια απελευθερώνονται.
  • Το Stack αποκτά πρόσβαση σε τοπικές μεταβλητές μόνο ενώ το Heap σάς επιτρέπει να έχετε πρόσβαση σε μεταβλητές παγκοσμίως.
  • Δεν είναι δυνατή η αλλαγή μεγέθους των μεταβλητών στοίβας, ενώ το μέγεθος των μεταβλητών σωρού.
  • Η μνήμη στοίβας κατανέμεται σε συνεχόμενο μπλοκ ενώ η μνήμη στοίβας εκχωρείται με οποιαδήποτε τυχαία σειρά.
  • Η στοίβα δεν απαιτεί την από-εκχώρηση μεταβλητών ενώ στο Heap απο-κατανομή απαιτείται.
  • Η κατανομή στοίβας και η εκκαθάριση γίνεται με οδηγίες του μεταγλωττιστή, ενώ η κατανομή και η αφαίρεση του σωρού γίνεται από τον προγραμματιστή.

Βασικές διαφορές μεταξύ Stack και Heap

Παράμετρος Σωρός Σωρός
Τύπος δομών δεδομένων Μια στοίβα είναι μια γραμμική δομή δεδομένων. Ο σωρός είναι μια ιεραρχική δομή δεδομένων.
Ταχύτητα πρόσβασης Πρόσβαση υψηλής ταχύτητας Αργότερα σε σύγκριση με το stack
Διαχείριση χώρου Ο χώρος διαχειρίζεται αποτελεσματικά από το λειτουργικό σύστημα, ώστε η μνήμη να μην γίνει ποτέ κατακερματισμένη. Το Heap Space δεν χρησιμοποιείται τόσο αποτελεσματικά. Η μνήμη μπορεί να κατακερματιστεί καθώς μπλοκ μνήμης κατανέμονται πρώτα και στη συνέχεια απελευθερώνονται.
Πρόσβαση Μόνο τοπικές μεταβλητές Σας επιτρέπει να έχετε πρόσβαση σε μεταβλητές παγκοσμίως.
Όριο μεγέθους χώρου Όριο στο μέγεθος στοίβας ανάλογα με το λειτουργικό σύστημα. Δεν έχει συγκεκριμένο όριο στο μέγεθος της μνήμης.
Αλλαγή μεγέθους Δεν είναι δυνατή η αλλαγή μεγέθους των μεταβλητών Το μέγεθος των μεταβλητών μπορεί να αλλάξει.
Κατανομή μνήμης Η μνήμη κατανέμεται σε συνεχόμενο μπλοκ. Η μνήμη κατανέμεται με οποιαδήποτε τυχαία σειρά.
Κατανομή και εκκαθάριση Αυτόματα γίνεται με οδηγίες μεταγλωττιστή. Αυτό γίνεται χειροκίνητα από τον προγραμματιστή.
Απενεργοποίηση Δεν χρειάζεται να εκχωρήσετε μεταβλητές. Απαιτείται ρητή απονομή.
Κόστος Πιο λιγο Περισσότερο
Εκτέλεση Μια στοίβα μπορεί να εφαρμοστεί με 3 τρόπους βασισμένο σε συστοιχία, χρησιμοποιώντας δυναμική μνήμη και συνδεδεμένη λίστα. Ο σωρός μπορεί να εφαρμοστεί χρησιμοποιώντας συστοιχία και δέντρα.
Κύριο θέμα Έλλειψη μνήμης Κατακερματισμός μνήμης
Τοποθεσία αναφοράς Αυτόματες οδηγίες μεταγλώττισης. Επαρκής
Ευκαμψία Σταθερό μέγεθος Είναι δυνατή η αλλαγή μεγέθους
Χρόνος πρόσβασης Γρηγορότερα Βραδύτερη

Πλεονεκτήματα της χρήσης του Stack

Εδώ είναι τα πλεονεκτήματα / οφέλη από τη χρήση στοίβας:

  • Σας βοηθά να διαχειριστείτε τα δεδομένα με τη μέθοδο Last In First Out (LIFO), η οποία δεν είναι δυνατή με τη λίστα και τον πίνακα.
  • Όταν μια συνάρτηση ονομάζεται οι τοπικές μεταβλητές αποθηκεύονται σε μια στοίβα και καταστρέφεται αυτόματα μόλις επιστραφεί.
  • Μια στοίβα χρησιμοποιείται όταν μια μεταβλητή δεν χρησιμοποιείται εκτός αυτής της συνάρτησης.
  • Σας επιτρέπει να ελέγχετε τον τρόπο κατανομής και αφαίρεσης της μνήμης.
  • Η στοίβα καθαρίζει αυτόματα το αντικείμενο.
  • Δεν καταστρέφεται εύκολα
  • Δεν είναι δυνατή η αλλαγή μεγέθους των μεταβλητών.

Πλεονεκτήματα της χρήσης του Heap

Πλεονεκτήματα / πλεονεκτήματα της χρήσης μνήμης σωρού είναι:

  • Ο σωρός σας βοηθά να βρείτε τον μεγαλύτερο και ελάχιστο αριθμό
  • Η συλλογή απορριμμάτων εκτελείται στη μνήμη σωρού για να ελευθερώσει τη μνήμη που χρησιμοποιείται από το αντικείμενο.
  • Η μέθοδος σωρού χρησιμοποιείται επίσης στην ουρά προτεραιότητας.
  • Σας επιτρέπει να έχετε πρόσβαση σε μεταβλητές παγκοσμίως.
  • Ο σωρός δεν έχει όριο στο μέγεθος της μνήμης.

Μειονεκτήματα της χρήσης του Stack

Μειονεκτήματα / μειονεκτήματα της χρήσης μνήμης Stack είναι:

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

Μειονεκτήματα από τη χρήση του Heap

Μειονεκτήματα / μειονεκτήματα της χρήσης μνήμης Heaps είναι:

  • Μπορεί να παρέχει τη μέγιστη μνήμη που μπορεί να παρέχει ένα λειτουργικό σύστημα
  • Χρειάζεται περισσότερος χρόνος για υπολογισμό.
  • Η διαχείριση της μνήμης είναι πιο περίπλοκη στη μνήμη σωρού καθώς χρησιμοποιείται παγκοσμίως.
  • Χρειάζεται πολύς χρόνος στην εκτέλεση σε σύγκριση με τη στοίβα.

Πότε να χρησιμοποιήσετε το σωρό ή στοίβα;

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

Ωστόσο, εάν εργάζεστε με σχετικά μικρές μεταβλητές που απαιτούνται μόνο έως ότου η λειτουργία που τις χρησιμοποιεί είναι ζωντανή. Στη συνέχεια, πρέπει να χρησιμοποιήσετε τη στοίβα, η οποία είναι ταχύτερη και ευκολότερη.