Heap management
Pistiolis Konstantinos
kpistiolis at hellug.gr
Sat Jun 3 00:53:00 EEST 2006
> ...
> Διάβασα για πιθανόν caching που κάνει η μνήμη, οπότε φτιάχνω ένα
> προγραμματάκι που κάνει malloc όση ελεύθερη έχει απομείνει ώστε να το
> στρεσάρω όσο μπορώ, μπας και την δώσει την άτιμη. Το αποτέλεσμα είναι
> οτι δεν την δίνει αυτή την μνήμη.
>
> Χρησιμοποιώ το top & ps για τα συμπεράσματα καθώς και την δομή
> mallinfo()[1] για πιο ακριβή συμπεράσματα. Επίσης χρησιμοποίησα και το
> nmap και είδα οτι όλη αυτή η μνήμη που δεσμεύεται είναι στο heap.
>
Τη μνήμη τη ζητάει το πρόγραμμά σου από το λειτουργικό και μετά τη
διαχειρίζεται η malloc(), πράγμα που σημαίνει ότι γενικά πάντα θα
έχει πάρει περισσότερη μνήμη απ' αυτή που χρησιμοποιείς.
Όταν τώρα κάνεις free() αυτό δε σημαίνει ότι η μνήμη θα πρέπει να
αποδοθεί αμέσως (ή σήμερα...) στο λειτουργικό. Αυτό το αποφασίζει
η υλοποίηση της malloc() και μάλιστα οι διαπραγματεύσεις με το λειτουργικό
γίνονται σε μεγαλύτερα κομάτια (που σημαίνει, ότι αν μετά τις free()
υπάρχουν πολλά σκόρπια κομάτια χρησιμοποιημένης μνήμης ίσως και να μη
γίνεται)
Δεν ξέρω πάντως αν η malloc() λαμβάνει υπ' όψιν το φόρτο του συστήματος
για να επισπεύσει την απελευθέρωση μνήμης, δηλαδή ίσως να μην πετυχαίνεις
τίποτε αν ένα άλλο προγραμματάκι ζητάει μνήμη.
Αλλά πρακτικά μάλλον δε σε νοιάζει, γιατί οι σελίδες που αντιστοιχούν
στις διευθύνσεις (εικονικής) μνήμης του προγράμματός σου που έχει πάρει
από το λειτουργικό η malloc() και δεν τις χρησιμοποιεί πια,
τελικά θα καταλήξουν στο swap (όταν και αν υπάρξει στενότης φυσικής
μνήμης).
Εκεί θα μείνουν μόνιμα χωρίς να φορτώνουν ιδιαίτερα το σύστημα μέχρι
να τις ξαναχρειαστείς, ή να αποδεσμευτούν τελείως (οπότε απλά σβήνονται)
Κώστας
More information about the Linux-greek-users
mailing list