Διαφορά μεταξύ Malloc και Νέα Διαφορά μεταξύ

Anonim

Malloc vs New

One από τις πιο κοινές ερωτήσεις συνέντευξης στην πρόσληψη ενός προγραμματιστή ηλεκτρονικών υπολογιστών είναι για τον αιτούντα / προγραμματιστή ηλεκτρονικών υπολογιστών να εξηγήσει τις διαφορές μεταξύ malloc και νέων. Τόσο το malloc όσο και το νέο υπάρχουν στη σφαίρα της γλώσσας του υπολογιστή και συχνά χρησιμοποιούνται από προγραμματιστές υπολογιστών για δυναμικές κατανομές μνήμης.

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

Ο νέος χειριστής είναι ασφαλής ως προς το είδος σε αντίθεση με τη λειτουργία malloc.

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

Και οι δύο έχουν διαφορετικούς τρόπους αντιμετώπισης της αποτυχίας και της εξάντλησης της μνήμης. Αν η λειτουργία malloc αποτύχει, επιστρέφει με έναν δείκτη NULL. Ο νέος χειριστής δεν επιστρέφει ποτέ δείκτη NULL, αλλά υποδεικνύει την αποτυχία με την εξαίρεση μιας εξαίρεσης. Αυτό είναι ένα πλεονέκτημα για τον χειριστή νέο, αφού ο προγραμματιστής του υπολογιστή δεν χρειάζεται να ελέγξει τον επιστρεφόμενο δείκτη κάθε φορά που καλεί νέα, ούτε ο προγραμματιστής του υπολογιστή θα χάσει μια τέτοια εξαίρεση.

Η λειτουργία malloc δεν δημιουργεί ένα αντικείμενο (που ονομάζεται κατασκευαστής αντικειμένου) αλλά ο χειριστής κάνει νέα. Ένα άλλο πλεονέκτημα του νέου είναι ότι ο χειριστής μπορεί να είναι υπερφορτωμένος ενώ η λειτουργία malloc δεν μπορεί. Ο νέος χειριστής απαιτεί έναν συγκεκριμένο αριθμό αντικειμένων για να κατανείμει, ενώ η λειτουργία malloc απαιτεί να προσδιοριστεί ο συνολικός αριθμός των byte που θα διατεθεί.

Η μνήμη μπορεί επίσης να αναδιαμορφωθεί ή να ανακατανεμηθεί χρησιμοποιώντας τη λειτουργία malloc χρησιμοποιώντας το realloc. Ωστόσο, ο νέος χειριστής δεν μπορεί να εκτελέσει αυτή τη λειτουργία και το θεωρεί ως ένα από τα κύρια μειονεκτήματα του χειριστή. Ένα άλλο πλεονέκτημα της λειτουργίας malloc over operator είναι ότι το malloc μπορεί να επεκτείνει γρήγορα την ποσότητα της μνήμης. Αυτό εξακολουθεί να χρησιμοποιεί malloc και realloc. Όταν κάνετε την ίδια κατάσταση στη γλώσσα C ++, ο προγραμματιστής πρέπει να δημιουργήσει ένα νέο κομμάτι μνήμης με νέο χειριστή. Η νέα μνήμη πρέπει να έχει τροποποιημένο μέγεθος και θα αντιγραφεί στα δεδομένα από το αρχικό buffer.Η αρχική μνήμη πρέπει να διαγραφεί μετά την αντιγραφή. Αυτό μπορεί να είναι μια αργή διαδικασία για έναν προγραμματιστή.

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

Περίληψη:

1. Το Malloc είναι μια λειτουργία ενώ ο νέος είναι χειριστής.

2. Το νέο είναι ένα συγκεκριμένο χαρακτηριστικό της γλώσσας C ++ ενώ το malloc χρησιμοποιείται στη γλώσσα C.

3. Ο νέος χειριστής ακολουθεί με "διαγραφή" ενώ η λειτουργία malloc πηγαίνει με "ελεύθερη. "

4. Η λειτουργία malloc είναι συνάρτηση βιβλιοθήκης για τη γλώσσα C ενώ ο νέος χειριστής είναι μια δομή σε επίπεδο γλώσσας από τη γλώσσα C ++.