Forskellen mellem malloc() og calloc()

Nøgleforskelle mellem malloc() vs calloc()

  • malloc()-funktionen returnerer kun startadressen og gør den ikke nul, på den anden side returnerer calloc()-funktionen startadressen og gør den til nul.
  • I malloc-funktionen er antallet af argumenter 1, mens antallet af argumenter i calloc-funktionen er 2.
  • malloc() tidseffektivitet er højere end calloc(), hvorimod malloc() ikke er sikker sammenlignet med calloc()
  • malloc initialiserer ikke hukommelse, hvorimod calloc udfører hukommelsesinitialisering.
malloc() vs calloc()
malloc() vs calloc()

Hvad er dynamisk hukommelsesallokering?

Dynamisk hukommelsestildeling er en proces til at allokere hukommelse på køretid. Der er fire biblioteksrutiner, calloc(), free(), realloc(), og malloc() som kan bruges til at allokere hukommelse og frigøre den under programafviklingen. Disse rutiner er defineret i header-filen kaldet stdlib.h.

Hvad er malloc() ?

Det er en funktion, som bruges til at allokere en hukommelsesblok dynamisk. Den reserverer hukommelsesplads af specificeret størrelse og returnerer nul-markøren, der peger på hukommelsesplaceringen.

Den returnerede markør er normalt af typen void. Det betyder, at vi kan tildele malloc-funktion til enhver pointer. Den fulde form for malloc er hukommelsestildeling.

Hvad er calloc() ?

Calloc() funktion bruges til at allokere flere hukommelsesblokke. Det er en dynamisk hukommelsesallokeringsfunktion, som bruges til at allokere hukommelsen til komplekse datastrukturer såsom arrays og strukturer. Hvis denne funktion ikke kan tildele nok plads som angivet, returnerer den null pointer. Den fulde form for calloc-funktion er sammenhængende tildeling.

Forskellen mellem malloc() og calloc()

Her er vigtige forskelle mellem malloc() vs calloc():

malloc () calloc()
Malloc()-funktionen vil skabe en enkelt hukommelsesblok af størrelse specificeret af brugeren. Calloc()-funktionen kan tildele flere hukommelsesblokke til en variabel.
Malloc-funktionen indeholder skraldværdi. Hukommelsesblokken tildelt af en calloc-funktion initialiseres altid til nul.
Antallet af argumenter er 1. Antallet af argumenter er 2.
Calloc er langsommere end malloc. Malloc er hurtigere end calloc.
Det er ikke sikkert sammenlignet med calloc. Det er sikkert at bruge sammenlignet med malloc.
Tidseffektiviteten er højere end calloc(). Tidseffektiviteten er lavere end malloc().
Malloc()-funktionen returnerer kun startadressen og gør den ikke nul. Inden adressen tildeles, returnerer funktionen Calloc() startadressen og gør den til nul.
Den udfører ikke initialisering af hukommelsen. Den udfører hukommelsesinitialisering.

Syntaks for malloc()

Her er en syntaks for malloc()

ptr = (cast_type *) malloc (byte_size);

I ovenstående syntaks er ptr en pointer af cast_type. Malloc-funktionen returnerer en pointer til den tildelte hukommelse af byte_size.

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

Når denne sætning udføres korrekt, reserveres en hukommelsesplads på 50 bytes. Adressen på den første byte af reserveret plads er tildelt til markøren "ptr" af typen int.

Syntaks for calloc()

Her er en syntaks for malloc()

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

Ovenstående syntaks bruges til at allokere n hukommelsesblokke af samme størrelse. Efter at hukommelsespladsen er allokeret, initialiseres alle bytes til nul. Pointeren, som i øjeblikket er ved den første byte af den tildelte hukommelsesplads, returneres.

Eksempel på malloc() i C

I koden nedenfor bruges sizeof(*ptr) til at allokere en hukommelsesblok på 15 heltal. I printf-sætningen finder vi værdien af ​​det 6. heltal.

#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:

Værdien af ​​det 6. heltal er 480

Eksempel på calloc() i C

C-sprogprogrammet nedenfor beregner summen af ​​de første ti led. Hvis pointerværdien er nul, vil hukommelsespladsen ikke blive tildelt.

For loop bruges til at iterere værdien af ​​en variabel "i" og udskrive summen. Endelig bruges funktion fri til at frigøre markøren.

#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:

Opbygning og beregning af sekvenssummen af ​​de første 10 led n Sum = 45

Hvorfor bruge malloc() ?

Her er grundene til at bruge malloc()

  • Du bør bruge malloc() når du skal allokere hukommelse ved runtime.
  • Du bør bruge malloc, når du skal allokere objekter, som skal eksistere ud over udførelsen af ​​den aktuelle hukommelsesblok.
  • Gå efter malloc(), hvis du har brug for at allokere hukommelse større end størrelsen på den stak.
  • Det returnerer markøren til den første byte af tildelt plads.
  • Det gør det muligt for udviklere at allokere hukommelse, efterhånden som den er nødvendig i den nøjagtige mængde.
  • Denne funktion tildeler en hukommelsesblokstørrelse på bytes fra heapen.

Hvorfor bruge calloc() ?

Her er grundene til at bruge calloc()

  • Når du skal indstille allokeret hukommelse til nul.
  • Du kan bruge calloc, der returnerer en markør for at få adgang til hukommelsesbunken.
  • Bruges når du skal initialisere elementerne til nul for at returnere en markør til hukommelsen.
  • For at forhindre overløb, der er muligt med malloc()
  • Brug calloc() til at anmode om en side, der allerede er nulstillet.