Δωρεάν μνήμη σε C με δωρεάν λειτουργία

Free Memory C With Free Function



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

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







Ανάγκη χρήσης της δωρεάν λειτουργίας στο C για απελευθέρωση μνήμης συστήματος:

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



Διαφορετικά, τελικά θα έχουμε έλλειψη μνήμης και δεν θα εκτελέσουμε περαιτέρω τα προγράμματά μας. Εδώ παίζει η δωρεάν () λειτουργία της βιβλιοθήκης stdlib.h. Χρησιμοποιούμε αυτήν τη συνάρτηση στο τέλος ενός προγράμματος ακριβώς πριν από τη δήλωση επιστροφής, έτσι ώστε η μνήμη σωρού να επιστρέψει στο σύστημα του υπολογιστή πριν από τον τερματισμό του προγράμματος σας.



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





Η γενική σύνταξη της συνάρτησης free () στη γλώσσα προγραμματισμού C έχει ως εξής:

κενόςΕλεύθερος (κενός*ptr)

Εδώ, η λέξη -κλειδί void πριν από τη συνάρτηση free () δηλώνει ότι ο τύπος επιστροφής αυτής της συνάρτησης είναι άκυρος. Ο δείκτης μέσα στις αγκύλες αντιστοιχεί στη θέση μνήμης που πρέπει να αφαιρεθεί. Η ακόλουθη ενότητα θα περιγράψει μερικά παραδείγματα στα οποία η συνάρτηση free () έχει χρησιμοποιηθεί για την απελευθέρωση της δυναμικής μνήμης που αποκτήθηκε στο C.



Παραδείγματα χρήσης της δωρεάν λειτουργίας σε C:

Η συνάρτηση δωρεάν () μπορεί να χρησιμοποιηθεί και με τις τρεις συναρτήσεις κατανομής μνήμης της βιβλιοθήκης stdlib.h, δηλαδή malloc, calloc και realloc. Είναι υποχρεωτική η χρήση αυτής της λειτουργίας αφού δηλώσετε τη βασική λειτουργικότητα του προγράμματός σας, ώστε να μπορείτε να παραδώσετε τη μνήμη σωρού που έχετε διαθέσει δυναμικά κατά την εκτέλεση του προγράμματος πίσω στο σύστημα του υπολογιστή σας. Τώρα, ας ρίξουμε μια ματιά σε μερικά παραδείγματα στα οποία η συνάρτηση free () έχει χρησιμοποιηθεί με τις συναρτήσεις malloc και calloc στη γλώσσα προγραμματισμού C.

Παράδειγμα # 1: Χρήση της δωρεάν λειτουργίας με calloc στο C:

Ο κωδικός C για τη χρήση της συνάρτησης δωρεάν () με τη συνάρτηση calloc () μοιράστηκε στην παρακάτω εικόνα:

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

Μια ελαφρώς τροποποιημένη έκδοση του ίδιου κώδικα εμφανίζεται επίσης στην παρακάτω εικόνα:

Αυτή η τροποποιημένη έκδοση προοριζόταν μόνο για εκτύπωση των δυναμικά κατανεμημένων τιμών μνήμης πριν από τη μη αυτόματη προετοιμασία της. Γνωρίζουμε ότι η συνάρτηση calloc () αρχικοποιεί ολόκληρη τη μνήμη με μηδενικά πριν από την πραγματοποίηση της πραγματικοποίησης. Ωστόσο, το κύριο σημείο που πρέπει να σημειωθεί εδώ σε αυτόν τον κώδικα είναι ότι παρόλο που αυτός ο κώδικας ήταν αρκετά συμπαγής και απλός, εξακολουθήσαμε να χρησιμοποιούμε τη συνάρτηση free () μόλις επιτευχθεί η επιθυμητή λειτουργικότητα μόνο για να απελευθερώσουμε τη μνήμη σωρού που είχαμε αποκτήθηκε ως αποτέλεσμα της εκτέλεσης αυτού του προγράμματος C.

Παράδειγμα # 2: Χρήση της δωρεάν λειτουργίας με malloc σε C:

Ο κωδικός C για τη χρήση της συνάρτησης δωρεάν () με τη συνάρτηση malloc () μοιράστηκε στην παρακάτω προσαρτημένη εικόνα:

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

Συμπέρασμα:

Αυτό το άρθρο τόνισε τη σημασία της χρήσης της συνάρτησης δωρεάν () στη γλώσσα προγραμματισμού C στο Linux. Οι περισσότεροι χρήστες πιστεύουν ότι οι συναρτήσεις κατανομής του αρχείου stdlib.h είναι πιο σημαντικές. Ωστόσο, περνώντας από αυτό το άρθρο, μπορείτε να δείτε καθαρά ότι η συνάρτηση δωρεάν () είναι εξίσου σημαντική. Θα σας βοηθήσει να απελευθερώσετε τη δυναμικά αποκτημένη μνήμη και να διασφαλίσετε ότι δεν θα εξαντληθείτε ποτέ όταν προσπαθείτε να εκτελέσετε τα προγράμματά σας στο μέλλον.