Βασική διαφορά – calloc εναντίον malloc
Στον προγραμματισμό, είναι απαραίτητη η αποθήκευση δεδομένων. Τα δεδομένα αποθηκεύονται στη μνήμη. Αυτές οι θέσεις μνήμης είναι γνωστές ως μεταβλητές. Κάθε μεταβλητή έχει έναν συγκεκριμένο τύπο. Μπορούν να είναι ακέραιοι, πλωτήρες, διπλοί, χαρακτήρες κ.λπ. Υπάρχουν επίσης δομές δεδομένων που μπορούν να αποθηκεύσουν μια διαδοχική συλλογή στοιχείων του ίδιου τύπου σταθερού μεγέθους. Είναι μια συστοιχία. Ο προγραμματιστής πρέπει να δηλώσει το μέγεθος του πίνακα. Εάν ο προγραμματιστής δηλώσει έναν πίνακα ακεραίων για πέντε στοιχεία, δεν είναι δυνατό να εκχωρηθεί μια τιμή σε έναν δείκτη υψηλότερο από το δηλωμένο μέγεθος. Η εκχώρηση μνήμης είναι σταθερή και δεν μπορεί να αλλάξει κατά το χρόνο εκτέλεσης. Άλλη μέθοδος εκχώρησης μνήμης είναι η δυναμική εκχώρηση μνήμης. Η δυναμική εκχώρηση μνήμης βοηθά στην κατανομή περισσότερης μνήμης όταν απαιτείται και στην απελευθέρωση όταν είναι απαραίτητο. Το αρχείο κεφαλίδας έχει τέσσερις λειτουργίες για δυναμική εκχώρηση μνήμης. Το calloc και το malloc είναι δύο τέτοιες λειτουργίες. Η βασική διαφορά μεταξύ calloc και malloc είναι ότι το calloc εκχωρεί τη μνήμη και επίσης προετοιμάζει τα εκχωρημένα μπλοκ μνήμης στο μηδέν ενώ το malloc εκχωρεί τη μνήμη αλλά δεν προετοιμάζει αυτήν την εκχωρημένη μνήμη στο μηδέν. Η πρόσβαση στο περιεχόμενο στο calloc θα δώσει μηδέν, αλλά το malloc θα δώσει μια τιμή σκουπιδιών.
Τι είναι calloc;
Η εκχώρηση μνήμης είναι η διαδικασία εκχώρησης μνήμης για τα προγράμματα που εκτελούνται. Μερικές φορές είναι απαραίτητο να αλλάξετε το μέγεθος της μνήμης. Επομένως, χρησιμοποιείται δυναμική εκχώρηση μνήμης. Γίνεται χρησιμοποιώντας δείκτες. Οι δείκτες είναι μεταβλητές αναφοράς που κρατούν τη διεύθυνση μιας άλλης μεταβλητής.
Εικόνα 01: calloc και malloc
Το calloc σημαίνει "συνεχής κατανομή". Εκχωρεί πολλαπλά μπλοκ μνήμης με το ίδιο μέγεθος. Η σύνταξη για το calloc είναι η εξής. Χρειάζονται δύο επιχειρήματα. Είναι ο αριθμός των μπλοκ και το μέγεθος κάθε μπλοκ. Η συνάρτηση calloc επιστρέφει έναν κενό δείκτη, επομένως χρησιμοποιείται ένας τελεστής cast για να επιστρέφει τον τύπο δείκτη σύμφωνα με τον απαιτούμενο τύπο δεδομένων.
voidcalloc(size_t num, size_t size);
Ανατρέξτε στο παρακάτω απλό πρόγραμμα C.
include
include
int main(){
int ptr=(int) calloc(20, sizeof(int));
if (ptr==NULL){
printf("Η μνήμη δεν εκχωρείται");
}
άλλο{
printf("Η μνήμη έχει εκχωρηθεί");
}
return 0;
}
Σύμφωνα με το παραπάνω πρόγραμμα, εκχωρείται ένα συνεχόμενο μπλοκ μνήμης που μπορεί να χωρέσει 20 στοιχεία. Κάθε ένα θα έχει το μέγεθος ενός ακέραιου αριθμού. Το sizeof(int) χρησιμοποιείται επειδή ο ακέραιος τύπος διαφέρει από μεταγλωττιστή σε μεταγλωττιστή.
Εάν η εκχώρηση μνήμης είναι επιτυχής, θα επιστρέψει τη διεύθυνση βάσης του μπλοκ μνήμης. Σημαίνει ότι ο δείκτης ptr δείχνει τώρα τη διεύθυνση βάσης αυτού του μπλοκ μνήμης. Όλες οι εκχωρημένες περιοχές αρχικοποιούνται σε μηδενικά. Θα εκτυπώσει το μήνυμα Εκχωρήθηκε μνήμη. Εάν η εκχώρηση μνήμης δεν είναι επιτυχής, θα επιστρέψει τον μηδενικό δείκτη. Επομένως, θα εκτυπωθεί Μήνυμα Η μνήμη δεν έχει εκχωρηθεί.
Τι είναι το malloc;
Η συνάρτηση malloc χρησιμοποιείται για την εκχώρηση της απαιτούμενης ποσότητας byte στη μνήμη. Η σύνταξη για το malloc είναι η εξής. Το μέγεθος αντιπροσωπεύει την απαιτούμενη μνήμη σε byte.
void malloc(size_t_size);
Η συνάρτηση malloc επιστρέφει έναν κενό δείκτη, επομένως χρησιμοποιείται ένας τελεστής cast για τον επιστρεφόμενο τύπο δείκτη σύμφωνα με τον απαιτούμενο τύπο δεδομένων.
Ανατρέξτε στο παρακάτω απλό πρόγραμμα C με συνάρτηση malloc.
include
include
int main(){
int ptr=(int) malloc (10sizeof(int));
if (ptr==NULL){
printf("Η μνήμη δεν εκχωρείται");
}
άλλο{
printf("Η μνήμη έχει εκχωρηθεί");
}
return 0;
}
Σύμφωνα με το παραπάνω πρόγραμμα, θα εκχωρηθεί μπλοκ μνήμης. Ο δείκτης δείχνει τη διεύθυνση έναρξης της εκχωρημένης μνήμης. Ο δείκτης που επιστρέφεται μετατρέπεται σε ακέραιο τύπο. Εάν εκχωρηθεί μνήμη, θα εκτυπωθεί μήνυμα εκχωρήθηκε μνήμη. Εάν η μνήμη δεν εκχωρηθεί, θα επιστρέψει ένας μηδενικός δείκτης. Επομένως, το μήνυμα δεν εκχωρείται μνήμη θα εκτυπωθεί.
Ποιες είναι οι ομοιότητες μεταξύ calloc και malloc;
- Και οι δύο αυτές συναρτήσεις δηλώνονται στο αρχείο κεφαλίδας. Είναι το τυπικό αρχείο κεφαλίδας βιβλιοθήκης.
- Και οι δύο λειτουργίες χρησιμοποιούνται για δυναμική εκχώρηση μνήμης.
- Ο δείκτης που επιστρέφεται από calloc και malloc θα πρέπει να μεταφερθεί στον συγκεκριμένο τύπο.
- Σε επιτυχή εκχώρηση μνήμης, και οι δύο συναρτήσεις θα επιστρέψουν έναν δείκτη με τη διεύθυνση βάσης του μπλοκ μνήμης.
- Εάν η εκχώρηση μνήμης δεν είναι επιτυχής, θα επιστραφεί ένας μηδενικός δείκτης.
Ποια είναι η διαφορά μεταξύ calloc και malloc;
calloc εναντίον malloc |
|
Το calloc είναι μια συνάρτηση για δυναμική εκχώρηση μνήμης σε αρχείο κεφαλίδας stdlib.h γλώσσας C που εκχωρεί έναν συγκεκριμένο αριθμό byte και τα αρχικοποιεί στο μηδέν. | Το malloc είναι μια συνάρτηση για δυναμική εκχώρηση μνήμης σε αρχείο κεφαλίδας stdlib.h γλώσσας C που εκχωρεί έναν συγκεκριμένο αριθμό byte. |
Σημασία | |
Το calloc σημαίνει συνεχόμενη κατανομή. | Το malloc σημαίνει εκχώρηση μνήμης. |
Σύνταξη | |
Το calloc ακολουθεί μια σύνταξη παρόμοια με το void calloc(size_t_num, size_t size); | Το malloc ακολουθεί μια σύνταξη παρόμοια με το void malloc(size_t_size);. |
Αριθμός επιχειρημάτων | |
Το calloc παίρνει δύο ορίσματα. Είναι ένας αριθμός μπλοκ και το μέγεθος κάθε μπλοκ. | Το malloc παίρνει ένα όρισμα. Είναι ένας αριθμός byte. |
Ταχύτητα | |
Το calloc διαρκεί λίγο περισσότερο από το malloc. Αυτό οφείλεται στο επιπλέον βήμα της προετοιμασίας της εκχωρημένης μνήμης κατά μηδέν. | Το malloc είναι πιο γρήγορο από το calloc. |
Σύνοψη – calloc εναντίον malloc
Στην εκχώρηση στατικής μνήμης, όπως με τη χρήση πινάκων, η μνήμη είναι σταθερή. Εάν αποθηκευτούν λίγα στοιχεία, τότε η υπόλοιπη μνήμη χάνεται. Μπορεί επίσης να προκαλέσει σφάλματα όταν η εκχωρημένη μνήμη είναι μικρή από την απαιτούμενη μνήμη. Επομένως, χρησιμοποιείται δυναμική εκχώρηση μνήμης. Στη γλώσσα C, το calloc και το malloc παρέχουν δυναμική κατανομή μνήμης. Η διαφορά μεταξύ calloc και malloc είναι ότι το calloc εκχωρεί μνήμη και επίσης αρχικοποιεί τα εκχωρημένα μπλοκ μνήμης στο μηδέν ενώ το malloc εκχωρεί τη μνήμη αλλά δεν προετοιμάζει τα μπλοκ μνήμης στο μηδέν. Το Malloc παίρνει δύο ορίσματα ενώ το calloc δύο ορίσματα.
Λήψη του PDF του calloc vs malloc
Μπορείτε να κατεβάσετε την έκδοση PDF αυτού του άρθρου και να τη χρησιμοποιήσετε για σκοπούς εκτός σύνδεσης σύμφωνα με τη σημείωση παραπομπής. Κατεβάστε την έκδοση PDF εδώ: Διαφορά μεταξύ calloc και malloc