Verschil tussen malloc() en calloc()

Belangrijkste verschillen tussen malloc() versus calloc()

  • De functie malloc() retourneert alleen het startadres en maakt het niet nul. Aan de andere kant retourneert de functie calloc() het startadres en maakt het nul.
  • In de malloc-functie is het aantal argumenten 1, terwijl in de calloc-functie het aantal argumenten 2 is.
  • malloc() tijdsefficiëntie is hoger dan calloc(), terwijl malloc() niet veilig is in vergelijking met calloc()
  • malloc initialiseert het geheugen niet, terwijl calloc de geheugeninitialisatie uitvoert.
malloc() versus calloc()
malloc() versus calloc()

Wat is dynamische geheugentoewijzing?

Dynamische geheugentoewijzing is een proces waarbij geheugen tijdens runtime wordt toegewezen. Er zijn vier bibliotheekroutines: calloc(), free(), realloc(), en malloc() die kunnen worden gebruikt om geheugen toe te wijzen en vrij te maken tijdens de uitvoering van het programma. Deze routines worden gedefinieerd in het headerbestand stdlib.h.

Wat is malloc()?

Het is een functie die wordt gebruikt om een ​​geheugenblok dynamisch toe te wijzen. Het reserveert geheugenruimte van een opgegeven grootte en retourneert de nulaanwijzer die naar de geheugenlocatie wijst.

De geretourneerde pointer is meestal van het type void. Het betekent dat we de malloc-functie aan elke aanwijzer kunnen toewijzen. De volledige vorm van malloc is geheugentoewijzing.

Wat is calloc()?

Calloc()-functie wordt gebruikt om meerdere geheugenblokken toe te wijzen. Het is een dynamische geheugentoewijzingsfunctie die wordt gebruikt om het geheugen toe te wijzen aan complexe gegevensstructuren zoals arrays en structuren. Als deze functie niet voldoende ruimte toewijst zoals gespecificeerd, retourneert deze een null-pointer. De volledige vorm van de calloc-functie is aaneengesloten toewijzing.

Verschil tussen malloc() en calloc()

Hier zijn belangrijke verschillen tussen malloc() en calloc():

malloc () calloc()
De functie Malloc() creëert een enkel geheugenblok met de door de gebruiker opgegeven grootte. De functie Calloc() kan meerdere geheugenblokken aan een variabele toewijzen.
De Malloc-functie bevat een afvalwaarde. Het door een calloc-functie toegewezen geheugenblok wordt altijd op nul geïnitialiseerd.
Aantal argumenten is 1. Aantal argumenten is 2.
Calloc is langzamer dan malloc. Malloc is sneller dan calloc.
Het is niet veilig in vergelijking met calloc. Het is veilig in gebruik vergeleken met malloc.
De tijdefficiëntie is hoger dan die van calloc(). De tijdsefficiëntie is lager dan die van malloc().
De functie Malloc() retourneert alleen het startadres en maakt het niet nul. Voordat het adres wordt toegewezen, retourneert de functie Calloc() het startadres en maakt dit nul.
Het voert geen initialisatie van het geheugen uit. Het voert geheugeninitialisatie uit.

Syntaxis van malloc()

Hier is een syntaxis van malloc()

ptr = (cast_type *) malloc (byte_size);

In de bovenstaande syntaxis is ptr een pointer van cast_type. De malloc-functie retourneert een verwijzing naar het toegewezen geheugen van byte_size.

Example: ptr = (int *) malloc (50)

Wanneer deze instructie succesvol wordt uitgevoerd, is er een geheugenruimte van 50 bytes gereserveerd. Het adres van de eerste byte gereserveerde ruimte wordt toegewezen aan de pointer “ptr” van het type int.

Syntaxis van calloc()

Hier is een syntaxis van malloc()

ptr = (cast_type *) calloc (n, size);

De bovenstaande syntaxis wordt gebruikt om n geheugenblokken van dezelfde grootte toe te wijzen. Nadat de geheugenruimte is toegewezen, worden alle bytes op nul geïnitialiseerd. De pointer, die zich momenteel op de eerste byte van de toegewezen geheugenruimte bevindt, wordt geretourneerd.

Voorbeeld van malloc() in C

In de onderstaande code wordt sizeof(*ptr) gebruikt om een ​​geheugenblok van 15 gehele getallen toe te wijzen. In de printf-instructie vinden we de waarde van het zesde gehele getal.

#include<stdlib.h>
#include<stdio.h>
int main(){
int *ptr;
ptr = malloc(15 * sizeof(*ptr)); 
    if (ptr != NULL) {
      *(ptr + 5) = 480; 
      printf("Value of the 6th integer is %d",*(ptr + 5));
    }
}

Output:

De waarde van het zesde gehele getal is 6

Voorbeeld van calloc() in C

Het onderstaande C-taalprogramma berekent de som van de eerste tien termen. Als de pointerwaarde nul is, wordt de geheugenruimte niet toegewezen.

De For-lus wordt gebruikt om de waarde van een variabele “i” te herhalen en de som af te drukken. Ten slotte wordt functie gratis gebruikt om de aanwijzer vrij te maken.

#include <stdio.h>
#include <stdlib.h>
    int main() {
        int i, * ptr, sum = 0;
        ptr = calloc(10, sizeof(int));
        if (ptr == NULL) {
            printf("Error! memory not allocated.");
            exit(0);
        }
        printf("Building and calculating the sequence sum of the first 10 terms \n");
        for (i = 0; i < 10; ++i) { * (ptr + i) = i;
            sum += * (ptr + i);
        }
        printf("Sum = %d", sum);
        free(ptr);
        return 0;
    }

Output:

Het bouwen en berekenen van de reekssom van de eerste 10 termen n Som = 45

Waarom malloc() gebruiken?

Hier zijn de redenen om malloc() te gebruiken

  • U moet malloc() gebruiken als u tijdens runtime geheugen moet toewijzen.
  • U moet malloc gebruiken als u objecten moet toewijzen die buiten de uitvoering van het huidige geheugenblok moeten bestaan.
  • Kies malloc() als je geheugen moet toewijzen dat groter is dan de grootte van die stapel.
  • Het retourneert de aanwijzer naar de eerste byte van de toegewezen ruimte.
  • Hiermee kunnen ontwikkelaars geheugen toewijzen in de exacte hoeveelheid die nodig is.
  • Deze functie wijst een geheugenblokgrootte van bytes uit de heap toe.

Waarom calloc() gebruiken?

Hier zijn de redenen voor het gebruik van calloc()

  • Wanneer u toegewezen geheugen op nul moet zetten.
  • U kunt calloc gebruiken die een pointer retourneert om toegang te krijgen tot de geheugenheap.
  • Wordt gebruikt wanneer u de elementen op nul moet initialiseren om een ​​verwijzing naar het geheugen terug te sturen.
  • Om overflow te voorkomen is dat mogelijk met malloc()
  • Gebruik calloc() om een ​​pagina op te vragen waarvan bekend is dat deze al op nul staat.