Διαφορά μεταξύ Mmap και malloc Διαφορά μεταξύ

Anonim

mmap vs malloc

Υπάρχει δυναμική μνήμη στο C και αυτό δείχνει την κατανομή μνήμης στη γλώσσα προγραμματισμού C μέσω ενός συνόλου λειτουργιών που υπάρχουν στη συνηθισμένη βιβλιοθήκη C. Ένα από αυτά είναι το malloc, το οποίο αναφέρεται στην κατανομή μνήμης. Στο σύστημα UNIX υπάρχει mmap, το οποίο αναφέρεται σε ένα σύστημα με μνήμη που φέρει το δικό του μοναδικό I / O. Αυτά τα δύο (mmap και malloc) θα έχουν την ίδια τιμή, αλλά η περαιτέρω εξέταση αποκαλύπτει κάποιες διαφορές. Αυτές οι διαφορές, που προκύπτουν από λειτουργικότητα, περιγράφονται παρακάτω.

Διαφορές

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

Η κύρια διεπαφή κατανομής μνήμης είναι malloc. Αυτή είναι η μεγαλύτερη στη βιβλιοθήκη C. Μέρος του κώδικα διαχείρισης που περιέχεται σε αυτό είναι mmap. Όταν τρέχει το malloc, συγκεντρώνει όλες τις διαθέσιμες εγκαταστάσεις του συστήματος. Πρόσθετες δυνατότητες συστήματος μπορούν να κινητοποιηθούν μέσω του πυρήνα, η οποία είναι μια από τις στρατηγικές διαχείρισης μνήμης που χρησιμοποιούν τα συστήματα για να εξασφαλίσουν ότι υπάρχει ικανοποιητική κατανομή μνήμης. Ωστόσο, η διαδικασία δεν είναι απλή και έχει γίνει περίπλοκη μόνο για να αποτρέψει τους ανθρώπους από τη δημιουργία απλών προγραμμάτων που μπορούν να αποδιοργανώσουν την κατανομή της μνήμης και ως εκ τούτου να δημιουργήσουν κακές επιδόσεις.

Το "mmap" από την άλλη πλευρά είναι μια κλήση συστήματος που αναλαμβάνει και ζητά από τον πυρήνα να βρει μια αχρησιμοποίητη και συνεχόμενη περιοχή σε μια διεύθυνση της εφαρμογής που είναι αρκετά μεγάλη ώστε να επιτρέπει τη χαρτογράφηση αρκετών σελίδων της μνήμης. Υπάρχει επίσης η δημιουργία δομών διαχείρισης εικονικής μνήμης οι οποίες στην πραγματικότητα δεν μπορούν να οδηγήσουν σε ένα segfault.

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

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

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

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

Η χρήση του mmap για την κατανομή μνήμης έρχεται με το μειονέκτημα ότι η κατανομή και η ανακατανομή των δεδομένων σε κομμάτια είναι δαπανηρή. Αυτό οφείλεται στο γεγονός ότι τα δεδομένα χωρίζονται σε πολυάριθμες περιοχές και επίσης αρνείται το mmap να κάνει κλήσεις συστήματος.

Το Mmap είναι επωφελές σε σχέση με το malloc επειδή η μνήμη που χρησιμοποιείται από το mmap επιστρέφει αμέσως στο λειτουργικό σύστημα. Η μνήμη που χρησιμοποιείται από το malloc δεν επιστρέφεται ποτέ παρά μόνο εάν υπάρχει σπάσιμο τμήματος δεδομένων. Αυτή η μνήμη διατηρείται ειδικά για επαναχρησιμοποίηση.

Περίληψη

Το "malloc" αντιπροσωπεύει το κεντρικό σημείο κατανομής μνήμης

Το σύστημα mmap καλεί και ζητάει έναν πυρήνα να βρει αχρησιμοποίητες περιοχές στις διευθύνσεις εφαρμογών που μπορούν να φιλοξενήσουν χαρτογράφηση αρκετών σελίδων μνήμης

κατανομή της μνήμης καθώς χωρίζει τη διαθέσιμη μνήμη και δεν μπορεί να κάνει κλήσεις συστήματος

Το όφελος του mmap πάνω από το malloc είναι η διαθεσιμότητα της μνήμης, σε αντίθεση με τη μνήμη malloc, η οποία επαναχρησιμοποιείται.