Κατανόηση της Διατηρούμενης Μνήμης σε Λειτουργίες
Στο πλαίσιο μιας συνάρτησης, το «διατηρεί» αναφέρεται στο γεγονός ότι η συνάρτηση δεν απελευθερώνει ή ελευθερώνει τη μνήμη που χρησιμοποιεί. Αντίθετα, κρατά τη μνήμη και είναι υπεύθυνο για την εκχώρηση της όταν δεν είναι πλέον απαραίτητη.
Με άλλα λόγια, μια συνάρτηση που διατηρεί τη μνήμη δεν επιστρέφει τη μνήμη στο σωρό ή στη στοίβα αφού τελειώσει η χρήση της. Αυτό σημαίνει ότι η συνάρτηση είναι υπεύθυνη για τη διαχείριση της διάρκειας ζωής της μνήμης, η οποία μπορεί να είναι χρήσιμη σε ορισμένες περιπτώσεις, αλλά απαιτεί επίσης προσεκτική διαχείριση για την αποφυγή διαρροών μνήμης.
Για παράδειγμα, εξετάστε μια συνάρτηση που εκχωρεί μνήμη για μια μεγάλη δομή δεδομένων και στη συνέχεια επιστρέφει δείκτη σε αυτήν τη δομή δεδομένων στον καλούντα. Εάν η λειτουργία δεν απελευθερώσει τη μνήμη όταν δεν είναι πλέον απαραίτητη, η μνήμη θα διατηρηθεί από τη λειτουργία και ο καλών θα είναι υπεύθυνος για την εκχώρηση της αργότερα. Αυτό μπορεί να οδηγήσει σε διαρροές μνήμης εάν ο καλών ξεχάσει να κατανείμει τη μνήμη.
Αντίθετα, μια συνάρτηση που επιστρέφει έναν δείκτη στη μνήμη που έχει εκχωρηθεί στη στοίβα ή στο σωρό και στη συνέχεια απελευθερώνει τη μνήμη όταν δεν είναι πλέον απαραίτητη (δηλαδή, `` malloc» και «free») δεν διατηρεί τη μνήμη. Η μνήμη απελευθερώνεται πίσω στο σωρό ή στη στοίβα μόλις η λειτουργία τελειώσει με τη χρήση της, επομένως ο καλών δεν χρειάζεται να ανησυχεί για τη διαχείριση της διάρκειας ζωής της μνήμης.



