Hauptunterschied – Calloc vs. Malloc
Beim Programmieren müssen Daten gespeichert werden. Daten werden im Speicher gespeichert. Diese Speicherstellen werden als Variablen bezeichnet. Jede Variable hat einen bestimmten Typ. Sie können Ganzzahlen, Gleitkommazahlen, Doubles, Zeichen usw. sein. Es gibt auch Datenstrukturen, die eine sequentielle Sammlung fester Größe von Elementen desselben Typs speichern können. Es ist ein Array. Der Programmierer muss die Array-Größe deklarieren. Wenn der Programmierer ein Array aus ganzen Zahlen für fünf Elemente deklariert, ist es nicht möglich, einem Index einen Wert zuzuweisen, der größer als die deklarierte Größe ist. Die Speicherzuordnung ist fest und kann zur Laufzeit nicht geändert werden. Eine andere Speicherzuweisungsmethode ist die dynamische Speicherzuweisung. Die dynamische Speicherzuweisung hilft, bei Bedarf mehr Speicher zuzuweisen und bei Bedarf freizugeben. Die Header-Datei hat vier Funktionen für die dynamische Speicherallokation. calloc und malloc sind zwei solche Funktionen. Der Hauptunterschied zwischen calloc und malloc besteht darin, dass calloc den Speicher zuweist und auch die zugewiesenen Speicherblöcke auf Null initialisiert, während malloc den Speicher zuweist, aber diesen zugewiesenen Speicher nicht auf Null initialisiert. Der Zugriff auf den Inh alt in calloc ergibt Null, aber malloc gibt einen Garbage-Wert zurück.
Was ist Calloc?
Speicherzuweisung ist der Prozess der Speicherzuweisung für die ausführenden Programme. Manchmal ist es notwendig, die Speichergröße zu ändern. Daher wird eine dynamische Speicherzuweisung verwendet. Dies geschieht mithilfe von Zeigern. Zeiger sind Referenzvariablen, die die Adresse einer anderen Variablen enth alten.
Abbildung 01: calloc und malloc
calloc steht für „Contiguous Allocation“. Es weist mehrere Speicherblöcke mit derselben Größe zu. Die Syntax für calloc lautet wie folgt. Es braucht zwei Argumente. Sie sind die Anzahl der Blöcke und die Größe jedes Blocks. Die Funktion calloc gibt einen void-Zeiger zurück, daher wird ein Cast-Operator verwendet, um den Zeigertyp entsprechend dem erforderlichen Datentyp zurückzugeben.
voidcalloc(size_t num, size_t size);
Beziehen Sie sich auf das untenstehende einfache C-Programm.
einschließen
einschließen
int main(){
int ptr=(int) calloc(20, sizeof(int));
if (ptr==NULL){
printf(“Speicher ist nicht zugewiesen”);
}
sonst{
printf(“Speicher wird zugewiesen”);
}
return 0;
}
Gemäß obigem Programm wird ein zusammenhängender Speicherblock zugewiesen, der 20 Elemente aufnehmen kann. Jeder hat die Größe einer ganzen Zahl. sizeof(int) wird verwendet, da der Integer-Typ von Compiler zu Compiler unterschiedlich ist.
Wenn die Speicherzuweisung erfolgreich ist, wird die Basisadresse des Speicherblocks zurückgegeben. Das bedeutet, dass der Zeiger ptr jetzt auf die Basisadresse dieses Speicherblocks zeigt. Alle zugeordneten Bereiche werden auf Null initialisiert. Es wird die Memory Allocated-Meldung gedruckt. Wenn die Speicherzuweisung nicht erfolgreich ist, wird der Nullzeiger zurückgegeben. Daher wird die Meldung Speicher ist nicht zugewiesen gedruckt.
Was ist Malloc?
Die malloc-Funktion wird verwendet, um die erforderliche Menge an Bytes im Speicher zuzuweisen. Die Syntax für malloc lautet wie folgt. Die Größe stellt den benötigten Speicher in Bytes dar.
void malloc(size_t_size);
Die Funktion malloc gibt einen Void-Zeiger zurück, daher wird ein Cast-Operator verwendet, um den Zeigertyp entsprechend dem erforderlichen Datentyp zurückzugeben.
Beziehen Sie sich auf das untenstehende einfache C-Programm mit malloc-Funktion.
einschließen
einschließen
int main(){
int ptr=(int) malloc (10sizeof(int));
if (ptr==NULL){
printf(“Speicher ist nicht zugewiesen”);
}
sonst{
printf(“Speicher wird zugewiesen”);
}
return 0;
}
Gemäß obigem Programm wird ein Speicherblock zugewiesen. Der Zeiger zeigt auf die Startadresse des zugewiesenen Speichers. Der zurückgegebene Zeiger wird in einen Integer-Typ konvertiert. Wenn Speicher zugewiesen ist, wird die Nachricht Speicher ist zugewiesen gedruckt. Wenn der Speicher nicht zugewiesen ist, wird ein Nullzeiger zurückgegeben. Daher wird die Meldung Speicher nicht zugewiesen gedruckt.
Was sind die Ähnlichkeiten zwischen calloc und malloc?
- Diese beiden Funktionen sind in der Header-Datei deklariert. Es ist die Header-Datei der Standardbibliothek.
- Beide Funktionen dienen der dynamischen Speicherallokation.
- Der von calloc und malloc zurückgegebene Zeiger sollte in den spezifischen Typ gecastet werden.
- Bei erfolgreicher Speicherallokation geben beide Funktionen einen Zeiger mit der Basisadresse des Speicherblocks zurück.
- Wenn die Speicherzuordnung nicht erfolgreich ist, wird ein Nullzeiger zurückgegeben.
Was ist der Unterschied zwischen calloc und malloc?
calloc gegen malloc |
|
calloc ist eine Funktion zur dynamischen Speicherzuweisung in der Header-Datei stdlib.h der Sprache C, die eine bestimmte Anzahl von Bytes zuweist und sie auf Null initialisiert. | malloc ist eine Funktion zur dynamischen Speicherzuweisung in der Header-Datei stdlib.h der Sprache C, die eine bestimmte Anzahl von Bytes zuweist. |
Bedeutung | |
calloc steht für Contiguous Allocation. | malloc steht für Memory Allocation. |
Syntax | |
calloc folgt einer ähnlichen Syntax wie void calloc(size_t_num, size_t size); | malloc folgt einer ähnlichen Syntax wie void malloc(size_t_size);. |
Anzahl Argumente | |
calloc benötigt zwei Argumente. Sie sind eine Anzahl von Blöcken und die Größe jedes Blocks. | malloc akzeptiert ein Argument. Es ist eine Anzahl von Bytes. |
Geschwindigkeit | |
calloc dauert etwas länger als malloc. Das liegt an dem zusätzlichen Schritt, den zugewiesenen Speicher mit Null zu initialisieren. | malloc ist schneller als calloc. |
Zusammenfassung – Calloc vs. Malloc
Bei der statischen Speicherallokation, wie z. B. bei der Verwendung von Arrays, ist der Speicher fest. Wenn wenige Elemente gespeichert werden, wird der Rest des Speichers verschwendet. Es kann auch zu Fehlern führen, wenn der zugewiesene Speicher kleiner als der erforderliche Speicher ist. Daher wird eine dynamische Speicherzuweisung verwendet. In der C-Sprache bieten calloc und malloc eine dynamische Speicherzuordnung. Der Unterschied zwischen calloc und malloc besteht darin, dass calloc Speicher zuweist und auch die zugewiesenen Speicherblöcke auf Null initialisiert, während malloc den Speicher zuweist, aber Speicherblöcke nicht auf Null initialisiert. Malloc akzeptiert zwei Argumente, während calloc zwei Argumente akzeptiert.
Laden Sie das PDF von calloc vs. malloc herunter
Sie können die PDF-Version dieses Artikels herunterladen und gemäß Zitationshinweis für Offline-Zwecke verwenden. Bitte laden Sie die PDF-Version hier herunter: Unterschied zwischen calloc und malloc