Είναι δωρεάν η εκχωρημένη μνήμη;

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

Είναι δωρεάν η εκχωρημένη μνήμη;
Είναι δωρεάν η εκχωρημένη μνήμη;
Anonim

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

Πώς γίνεται δωρεάν η εκχωρημένη μνήμη;

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

Τι θα συμβεί εάν δεν ελευθερώσετε την εκχωρημένη μνήμη;

Στις περισσότερες περιπτώσεις, η κατανομή της memory ακριβώς πριν την έξοδο από το πρόγραμμα είναι άσκοπη. Το λειτουργικό σύστημα θα το ανακτήσει ούτως ή άλλως. Το Δωρεάν θα αγγίξει και θα σελιδοποιήσει τα νεκρά αντικείμενα. το λειτουργικό σύστημα δεν θα το κάνει. Συνέπεια: Να είστε προσεκτικοί με τους "ανιχνευτές διαρροής" που μετρούν τις κατανομές.

Είναι ακριβή η κατανομή μνήμης;

Μια απλή μέτρηση του κόστους εκχώρησης και απελευθέρωσης μεγάλων μπλοκ μνήμης θα συμπεράνει ότι κοστίζει περίπου 7,5 μs για κάθε κατανομή/δωρεάν ζεύγος. Ωστόσο, υπάρχουν τρία ξεχωριστά κόστη ανά MB για μεγάλες κατανομές.

Μπορεί να ανακατανεμηθεί ο εκχωρημένος χώρος μνήμης, εάν ναι, πώς;

Η συνάρτηση realloc εκχωρεί, ανακατανέμει ή ελευθερώνει το μπλοκ μνήμης που καθορίζεται από το old_blk με βάση τους ακόλουθους κανόνες: Εάν το old_blk είναι NULL, ένα νέο μπλοκ μνήμης μεγέθους byte είναικατανέμεται. Εάν το μέγεθος είναι μηδέν, η ελεύθερη συνάρτηση καλείται να απελευθερώσει τη μνήμη που δείχνει το old_blk.

Συνιστάται: