Βασική διαφορά – Στατική έναντι δυναμικής κατανομής μνήμης
Στον προγραμματισμό, είναι απαραίτητο να αποθηκεύονται υπολογιστικά δεδομένα. Αυτά τα δεδομένα αποθηκεύονται στη μνήμη. Οι θέσεις μνήμης για την αποθήκευση δεδομένων στον προγραμματισμό υπολογιστή είναι γνωστές ως μεταβλητές. Οι μεταβλητές έχουν συγκεκριμένο τύπο δεδομένων. Επομένως, η μνήμη εκχωρείται για την εκτέλεση των προγραμμάτων. Η μνήμη μπορεί να εκχωρηθεί με δύο τρόπους. Είναι η εκχώρηση στατικής μνήμης και η εκχώρηση δυναμικής μνήμης. Στην εκχώρηση στατικής μνήμης, μόλις εκχωρηθεί η μνήμη, δεν μπορεί να αλλάξει. Η μνήμη δεν είναι επαναχρησιμοποιήσιμη. Αλλά στη δυναμική εκχώρηση μνήμης, μόλις εκχωρηθεί η μνήμη, μπορεί να αλλάξει. Η βασική διαφορά μεταξύ της εκχώρησης στατικής και δυναμικής μνήμης είναι ότι στην εκχώρηση στατικής μνήμης μόλις εκχωρηθεί η μνήμη, το μέγεθος της μνήμης είναι σταθερό ενώ στη δυναμική εκχώρηση μνήμης, όταν εκχωρηθεί η μνήμη, το μέγεθος της μνήμης μπορεί να αλλάξει.
Τι είναι η εκχώρηση στατικής μνήμης;
Στην εκχώρηση στατικής μνήμης, η εκχωρημένη μνήμη είναι σταθερή. Μόλις εκχωρηθεί η μνήμη, δεν μπορεί να αλλάξει. Η μνήμη δεν μπορεί να αυξηθεί ή να μειωθεί. Για παράδειγμα, στη γλώσσα C εάν ο προγραμματιστής γράψει int x, που σημαίνει ότι η μεταβλητή μπορεί να αποθηκεύσει μια ακέραια τιμή. Ο αριθμός των byte εξαρτάται από τον υπολογιστή. Μπορεί να υπάρχουν και πίνακες. Π.χ. int x [5]; Αυτό το x είναι ένας πίνακας που μπορεί να αποθηκεύσει μια ακολουθία δεδομένων που είναι του ίδιου τύπου. Μπορεί να αποθηκεύσει πέντε ακέραια στοιχεία. Δεν μπορεί να αποθηκεύσει περισσότερα από πέντε στοιχεία. Στην Java, ένας πίνακας μπορεί να δημιουργηθεί ως, int arr=new int[5]; Ο πίνακας "arr" μπορεί να αποθηκεύσει 5 ακέραιες τιμές και δεν μπορεί να αποθηκεύσει περισσότερες από αυτές.
Εικόνα 01: Μέθοδοι κατανομής μνήμης
Στην εκχώρηση στατικής μνήμης, όταν οι μεταβλητές εκχωρηθούν, παραμένουν μόνιμες. Μετά την αρχική εκχώρηση, ο προγραμματιστής δεν μπορεί να αλλάξει το μέγεθος της μνήμης. Εάν ο προγραμματιστής εκχώρησε έναν πίνακα που μπορεί να αποθηκεύσει 10 στοιχεία, δεν είναι δυνατό να αποθηκευτούν τιμές μεγαλύτερες από αυτό το καθορισμένο ποσό. Εάν ο προγραμματιστής διέθεσε αρχικά έναν πίνακα που μπορεί να χωρέσει 10 στοιχεία, αλλά χρειαζόταν μόνο 5 στοιχεία, τότε υπάρχει σπατάλη μνήμης. Αυτή η μνήμη δεν χρειάζεται πλέον, αλλά δεν είναι επίσης δυνατή η επαναχρησιμοποίηση της μνήμης. Η εκχώρηση στατικής μνήμης έχει διορθωθεί, αλλά η υλοποίηση είναι απλή και εύκολη και είναι επίσης γρήγορη.
Τι είναι η δυναμική κατανομή μνήμης;
Μερικές φορές είναι απαραίτητο να αλλάξετε το μέγεθος της μνήμης. Έτσι, η μνήμη μπορεί να εκχωρηθεί δυναμικά. Ανάλογα με τις εισαγωγές και τις διαγραφές των στοιχείων δεδομένων, η μνήμη μπορεί να αυξηθεί ή να συρρικνωθεί. Είναι γνωστό ως δυναμική εκχώρηση μνήμης.
Στη γλώσσα C, το αρχείο κεφαλίδας stdlib.h, υπάρχουν τέσσερις λειτουργίες για δυναμική εκχώρηση μνήμης. Είναι calloc, malloc, realloc και δωρεάν. Η συνάρτηση malloc() εκχωρεί ένα απαιτούμενο μέγεθος byte και επιστρέφει έναν κενό δείκτη, δείχνοντας το πρώτο byte της εκχωρημένης μνήμης. Η συνάρτηση calloc() εκχωρεί ένα απαιτούμενο μέγεθος byte και τα αρχικοποιεί στο μηδέν. Στη συνέχεια, επιστρέφει έναν κενό δείκτη στη μνήμη. Η συνάρτηση free() χρησιμοποιείται για την εκ νέου κατανομή της εκχωρημένης μνήμης. Και η λειτουργία realloc μπορεί να τροποποιήσει τη μνήμη που είχε εκχωρηθεί προηγουμένως. Μετά την εκχώρηση μνήμης με χρήση calloc ή malloc, το μέγεθος της μνήμης είναι σταθερό, αλλά μπορεί να αυξηθεί ή να μειωθεί χρησιμοποιώντας τη συνάρτηση realloc. Στη Java, οι συλλογές μπορούν να χρησιμοποιηθούν για δυναμική κατανομή μνήμης.
Το κύριο πλεονέκτημα της δυναμικής εκχώρησης μνήμης είναι ότι εξοικονομεί μνήμη. Ο προγραμματιστής μπορεί να εκχωρήσει μνήμη ή να απελευθερώσει τη μνήμη εάν χρειάζεται. Η μνήμη μπορεί να ανακατανεμηθεί κατά την εκτέλεση και μπορεί να ελευθερώσει τη μνήμη όταν δεν απαιτείται. Η δυναμική εκχώρηση μνήμης είναι επίσης αποτελεσματική από την εκχώρηση στατικής μνήμης. Ένα μειονέκτημα είναι ότι η υλοποίηση δυναμικής εκχώρησης μνήμης είναι περίπλοκη.
Ποιες είναι οι ομοιότητες μεταξύ της εκχώρησης στατικής και δυναμικής μνήμης;
- Και οι δύο είναι μηχανισμοί εκχώρησης μνήμης.
- Και τα δύο πρέπει να υλοποιηθούν από τον προγραμματιστή χειροκίνητα.
Ποια είναι η διαφορά μεταξύ της εκχώρησης στατικής και δυναμικής μνήμης;
Στατική έναντι δυναμικής κατανομής μνήμης |
|
Η εκχώρηση στατικής μνήμης είναι μια μέθοδος εκχώρησης μνήμης και μόλις εκχωρηθεί η μνήμη, διορθώνεται. | Η δυναμική εκχώρηση μνήμης είναι μια μέθοδος εκχώρησης μνήμης και μόλις εκχωρηθεί η μνήμη, μπορεί να αλλάξει. |
Τροποποίηση | |
Στην εκχώρηση στατικής μνήμης, δεν είναι δυνατή η αλλαγή μεγέθους μετά την αρχική κατανομή. | Στη δυναμική εκχώρηση μνήμης, η μνήμη μπορεί να ελαχιστοποιηθεί ή να μεγιστοποιηθεί ανάλογα. |
Εφαρμογή | |
Η εκχώρηση στατικής μνήμης είναι εύκολη στην εφαρμογή. | Η δυναμική εκχώρηση μνήμης είναι πολύπλοκη στην εφαρμογή. |
Ταχύτητα | |
Στη στατική μνήμη, η εκτέλεση εκχώρησης είναι ταχύτερη από τη δυναμική εκχώρηση μνήμης. | Στη δυναμική μνήμη, η εκτέλεση της εκχώρησης είναι πιο αργή από την εκχώρηση στατικής μνήμης. |
Χρήση μνήμης | |
Στην εκχώρηση στατικής μνήμης, δεν είναι δυνατή η επαναχρησιμοποίηση της αχρησιμοποίητης μνήμης. | Η δυναμική εκχώρηση μνήμης επιτρέπει την επαναχρησιμοποίηση της μνήμης. Ο προγραμματιστής μπορεί να εκχωρήσει περισσότερη μνήμη όταν απαιτείται. Μπορεί να απελευθερώσει τη μνήμη όταν χρειάζεται. |
Σύνοψη – Στατική έναντι δυναμικής κατανομής μνήμης
Στον προγραμματισμό, η εκχώρηση στατικής μνήμης και η δυναμική εκχώρηση μνήμης είναι δύο μηχανισμοί για την εκχώρηση μνήμης. Η διαφορά μεταξύ της εκχώρησης στατικής και δυναμικής μνήμης είναι ότι στην εκχώρηση στατικής μνήμης μόλις εκχωρηθεί η μνήμη, το μέγεθος της μνήμης είναι σταθερό ενώ στη δυναμική εκχώρηση μνήμης, μόλις εκχωρηθεί η μνήμη, το μέγεθος της μνήμης μπορεί να αλλάξει. Ο προγραμματιστής μπορεί να αποφασίσει εάν η μνήμη πρέπει να είναι στατική ή δυναμική ανάλογα με την εφαρμογή.
Λήψη του PDF του Static vs Dynamic Memory Allocation
Μπορείτε να κατεβάσετε την έκδοση PDF αυτού του άρθρου και να τη χρησιμοποιήσετε για σκοπούς εκτός σύνδεσης σύμφωνα με τη σημείωση παραπομπής. Κατεβάστε την έκδοση PDF εδώ: Διαφορά μεταξύ της στατικής και δυναμικής κατανομής μνήμης