Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> Προγραμματισμός Υπολογιστών Γλώσσες

Τι είναι Υπερχείλιση στοίβας

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

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

Εξετάστε το ακόλουθο παράδειγμα σε ψευδοκώδικα :

λειτουργία ενός { 1 . καλέστε β.2 λειτουργία . καλέστε λειτουργίας c . }

λειτουργία b { 1 . καλέστε c.2 λειτουργία . Εκτύπωση Spot . }

Λειτουργίας c { 1 . Εκτύπωση Run . }

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

> A1 --- > B1 -------- > C1

από την πρώτη γραμμή της λειτουργίας Α καλεί τη λειτουργία Β , και η πρώτη γραμμή της λειτουργίας Β συνάρτηση κλήσεις C. Μετά τη λειτουργία C θα τελειώσει , το πρόγραμμα θα συνεχίσει να δημιουργήσετε αντίγραφα ασφαλείας της αλυσίδας , το τρέξιμο Β2 και τελικά Α2 .
Η
Η Άπειρο Αναδρομή
Η

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

λειτουργία A { 1 . καλέστε λειτουργία Α. }

Και η προκύπτουσα σωρό :

- > A1 --- > A1 -------- > Α1 ------- ------- > Α1 ( και ούτω καθεξής )

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

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

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

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα