Malloc () vs calloc (): Nøgleforskelle forklaret med eksempler

Indholdsfortegnelse:

Anonim

Før vi lærer forskellen mellem malloc og calloc, lad os lære-

Hvad er dynamisk hukommelsesallokering?

Dynamisk hukommelsesallokering er en proces til allokering af hukommelse ved kørselstid. Der er fire biblioteksrutiner, calloc (), free (), realloc () og malloc (), som kan bruges til at allokere hukommelse og frigøre den under programudførelsen. Disse rutiner er defineret i headerfilen kaldet stdlib.h.

Hvad er Malloc ()?

Det er en funktion, der bruges til at allokere en hukommelsesblok dynamisk. Den reserverer hukommelsesplads med den angivne størrelse og returnerer nulmarkøren, der peger på hukommelsesplaceringen.

Den returnerede markør er normalt ugyldig. Det betyder, at vi kan tildele malloc-funktion til enhver markør. Den fulde form for malloc er hukommelsesallokering.

I denne vejledning lærer du:

  • Hvad er dynamisk hukommelsesallokering?
  • Hvad er Malloc ()?
  • Hvad er calloc ()?
  • Hvorfor bruge malloc ()?
  • Hvorfor bruge calloc ()?
  • Syntaks for malloc ()
  • Syntaks for calloc ()
  • Eksempel på malloc () i C
  • Eksempel på calloc () i C
  • Forskellen mellem calloc () og malloc ()

Hvad er calloc ()?

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

Hvorfor bruge malloc ()?

Her er grundene til at bruge malloc ()

  • Du skal bruge malloc (), når du skal allokere hukommelse ved kørsel.
  • Du skal bruge malloc, når du skal allokere objekter, der skal eksistere ud over udførelsen af ​​den aktuelle hukommelsesblok.
  • Gå efter malloc (), hvis du skal allokere hukommelse, der er større end størrelsen på den stak.
  • Det returnerer markøren til den første byte af det tildelte rum.
  • Det gør det muligt for udviklere at tildele hukommelse efter behov i den nøjagtige mængde.
  • Denne funktion tildeler en hukommelsesblokstørrelse på bytes fra bunken.

Hvorfor bruge calloc ()?

Her er grundene til at bruge calloc ()

  • Når du skal indstille den tildelte hukommelse til nul.
  • Du kan bruge calloc, der returnerer en markør for at få adgang til hukommelsesbunke.
  • 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 vides at allerede er nulstillet.

Syntaks for malloc ()

Her er en syntaks af malloc ()

ptr = (cast_type *) malloc (byte_size);

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

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

Når denne erklæring er eksekveret, reserveres et hukommelsesrum på 50 byte. Adressen til den første byte med reserveret plads tildeles markøren "ptr" af typen int.

Syntaks for calloc ()

Her er en syntaks af malloc ()

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

Ovenstående syntaks bruges til at allokere n hukommelsesblokke af samme størrelse. Når hukommelsespladsen er tildelt, initialiseres alle bytes til nul. Markøren, som i øjeblikket er ved den første byte i det tildelte hukommelsesrum, returneres.

Eksempel på malloc () i C

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

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

Produktion:

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

Eksempel på calloc () i C

C-sprogprogrammet nedenfor beregner summen af ​​de første ti termer. Hvis markørens værdi er nul, tildeles hukommelsesområdet ikke.

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

#include #include 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;}

Produktion:

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

Forskellen mellem calloc () og malloc ()

Herer er vigtig forskel mellem malloc () og calloc ():

malloc () calloc ()
Malloc () -funktionen opretter en enkelt hukommelsesblok med den størrelse, der er angivet af brugeren. Calloc () -funktionen kan tildele flere blokke af hukommelse til en variabel.
Malloc-funktionen indeholder affaldsværdi. Hukommelsesblokken tildelt af en calloc-funktion initialiseres altid til nul.
Antal argumenter er 2. Antal argumenter er 1.
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.
Tidseffektivitet er højere end calloc (). Tidseffektivitet er lavere end malloc ().
Malloc () -funktionen returnerer kun startadresse og gør den ikke nul. Før tildelingen af ​​adressen returnerer funktionen Calloc () startadressen og gør den nul.
Den udfører ikke initialisering af hukommelsen. Det udfører hukommelsesinitialisering.

Nøgleforskelle:

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