Forskjellen mellom malloc() og calloc()
Nรธkkelforskjeller mellom malloc() og calloc()
- malloc()-funksjonen returnerer bare startadressen og gjรธr den ikke null, pรฅ den annen side returnerer calloc()-funksjonen startadressen og gjรธr den null.
- I malloc-funksjonen er antallet argumenter 1, mens i calloc-funksjonen er antallet argumenter 2.
- malloc() tidseffektivitet er hรธyere enn calloc(), mens malloc() ikke er sikker sammenlignet med calloc()
- malloc initialiserer ikke minne, mens calloc utfรธrer minneinitialisering.

Hva er dynamisk minnetildeling?
Dynamisk minnetildeling er en prosess for รฅ tildele minne under kjรธring. Det er fire biblioteksrutiner, calloc(), free(), realloc(), og malloc() som kan brukes til รฅ allokere minne og frigjรธre det under programkjรธringen. Disse rutinene er definert i header-filen kalt stdlib.h.
Hva er malloc()?
Det er en funksjon som brukes til รฅ tildele en minneblokk dynamisk. Den reserverer minneplass av spesifisert stรธrrelse og returnerer null-pekeren som peker til minneplasseringen.
Pekeren som returneres er vanligvis av typen void. Det betyr at vi kan tilordne malloc-funksjon til enhver peker. Den fulle formen for malloc er minnetildeling.
Hva er calloc()?
Calloc() funksjon brukes til รฅ tildele flere minneblokker. Det er en dynamisk minneallokeringsfunksjon som brukes til รฅ allokere minnet til komplekse datastrukturer som matriser og strukturer. Hvis denne funksjonen ikke klarer รฅ tildele nok plass som spesifisert, returnerer den null-pekeren. Den fullstendige formen for calloc-funksjonen er sammenhengende tildeling.
Forskjellen mellom malloc() og calloc()
Her er viktige forskjeller mellom malloc() vs calloc():
| malloc () | calloc() |
|---|---|
| Malloc()-funksjonen vil lage en enkelt minneblokk med stรธrrelse spesifisert av brukeren. | Calloc()-funksjonen kan tilordne flere minneblokker for en variabel. |
| Malloc-funksjonen inneholder sรธppelverdi. | Minneblokken tildelt av en calloc-funksjon initialiseres alltid til null. |
| Antall argument er 1. | Antall argumenter er 2. |
| Calloc er tregere enn malloc. | Malloc er raskere enn calloc. |
| Det er ikke sikkert sammenlignet med calloc. | Den er sikker รฅ bruke sammenlignet med malloc. |
| Tidseffektiviteten er hรธyere enn calloc(). | Tidseffektiviteten er lavere enn malloc(). |
| Malloc()-funksjonen returnerer bare startadressen og gjรธr den ikke null. | Fรธr du tildeler adressen, returnerer Calloc()-funksjonen startadressen og gjรธr den null. |
| Den utfรธrer ikke initialisering av minne. | Den utfรธrer minneinitialisering. |
Syntaks for malloc()
Her er en syntaks for malloc()
ptr = (cast_type *) malloc (byte_size);
I syntaksen ovenfor er ptr en peker av cast_type. Malloc-funksjonen returnerer en peker til det tildelte minnet til byte_size.
Example: ptr = (int *) malloc (50)
Nรฅr denne setningen er utfรธrt, er en minneplass pรฅ 50 byte reservert. Adressen til den fรธrste byten med reservert plass er tilordnet pekeren "ptr" av typen int.
Syntaks for calloc()
Her er en syntaks for malloc()
ptr = (cast_type *) calloc (n, size);
Syntaksen ovenfor brukes til รฅ tildele n minneblokker av samme stรธrrelse. Etter at minneplassen er tildelt, initialiseres alle byte til null. Pekeren, som for รธyeblikket er pรฅ den fรธrste byten av den tildelte minneplassen, returneres.
Eksempel pรฅ malloc() i C
I koden nedenfor brukes sizeof(*ptr) for รฅ tildele en minneblokk pรฅ 15 heltall. I printf-setningen finner vi verdien av det 6. heltall.
#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));
}
}
Utgang:
Verdien av det sjette heltall er 6
Eksempel pรฅ calloc() i C
C-sprรฅkprogrammet nedenfor beregner summen av de ti fรธrste leddene. Hvis pekerverdien er null, vil ikke minneplassen tildeles.
For loop brukes til รฅ iterere verdien av en variabel "i" og skrive ut summen. Til slutt brukes funksjon fri for รฅ frigjรธre pekeren.
#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;
}
Utgang:
Bygge og beregne sekvenssummen av de fรธrste 10 leddene n Sum = 45
Hvorfor bruke malloc() ?
Her er grunnene til รฅ bruke malloc()
- Du bรธr bruke malloc() nรฅr du mรฅ tildele minne under kjรธring.
- Du bรธr bruke malloc nรฅr du mรฅ tildele objekter som mรฅ eksistere utover kjรธringen av gjeldende minneblokk.
- Gรฅ for malloc() hvis du trenger รฅ tildele minne stรธrre enn stรธrrelsen pรฅ den stabelen.
- Den returnerer pekeren til den fรธrste byten med tildelt plass.
- Det gjรธr det mulig for utviklere รฅ tildele minne etter behov i den nรธyaktige mengden.
- Denne funksjonen tildeler en minneblokkstรธrrelse pรฅ byte fra heapen.
Hvorfor bruke calloc() ?
Her er grunnene til รฅ bruke calloc()
- Nรฅr du mรฅ sette tildelt minne til null.
- Du kan bruke calloc som returnerer en peker for รฅ fรฅ tilgang til minnehaugen.
- Brukes nรฅr du trenger รฅ initialisere elementene til null for รฅ returnere en peker til minnet.
- For รฅ forhindre overlรธp som er mulig med malloc()
- Bruk calloc() for รฅ be om en side som er kjent for รฅ allerede vรฆre nullstilt.
