Før vi lærer forskjellen mellom malloc og calloc, la oss lære-
Hva er dynamisk minnetildeling?
Dynamisk minnetildeling er en prosess for tildeling av minne i løpetid. Det er fire bibliotekrutiner, calloc (), free (), realloc () og malloc () som kan brukes til å tildele minne og frigjøre det under programutførelsen. Disse rutinene er definert i toppfilen kalt stdlib.h.
Hva er Malloc ()?
Det er en funksjon som brukes til å fordele en blokk med minne dynamisk. Den reserverer minneplass av spesifisert størrelse og returnerer nullpekeren som peker til minneplasseringen.
Pekeren som returneres er vanligvis ugyldig. Det betyr at vi kan tildele malloc-funksjon til hvilken som helst peker. Den fulle formen for malloc er minnetildeling.
I denne opplæringen lærer du:
- Hva er dynamisk minnetildeling?
- Hva er Malloc ()?
- Hva er Calloc ()?
- Hvorfor bruke malloc ()?
- Hvorfor bruke calloc ()?
- Syntaks for malloc ()
- Syntaks for calloc ()
- Eksempel på malloc () i C
- Eksempel på calloc () i C
- Forskjellen mellom calloc () og malloc ()
Hva er Calloc ()?
Calloc () -funksjonen brukes til å tildele flere minneblokker. Det er en dynamisk minnetildelingsfunksjon som brukes til å tildele minnet til komplekse datastrukturer som matriser og strukturer. Hvis denne funksjonen ikke tildeler nok plass som spesifisert, returnerer den nullpekeren. Den fulle formen for calloc-funksjon er sammenhengende tildeling.
Hvorfor bruke malloc ()?
Her er årsakene til å bruke malloc ()
- Du bør bruke malloc () når du må tildele minne ved kjøretid.
- Du bør bruke malloc når du må tildele objekter som må eksistere utover kjøringen av den nåværende minneblokken.
- Gå til malloc () hvis du trenger å tildele minne som er større enn størrelsen på den bunken.
- Den returnerer pekeren til den første byten med tildelt plass.
- Det gjør det mulig for utviklere å tildele minne etter behov i nøyaktig mengde.
- Denne funksjonen tildeler en minneblokkstørrelse på byte fra bunken.
Hvorfor bruke calloc ()?
Her er årsakene til å bruke calloc ()
- Når du må sette tildelt minne til null.
- Du kan bruke calloc som returnerer en peker for å få tilgang til hukommelse.
- 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 er nullstilt.
Syntaks for malloc ()
Her er en syntaks av malloc ()
ptr = (cast_type *) malloc (byte_size);
I syntaksen ovenfor er ptr en peker med cast_type. Malloc-funksjonen returnerer en peker til det tildelte minnet til byte_størrelse.
Example: ptr = (int *) malloc (50)
Når denne utsagnet er utført, er det lagret et minne på 50 byte. Adressen til den første byten med reservert plass tildeles pekeren "ptr" av typen int.
Syntaks for calloc ()
Her er en syntaks av malloc ()
ptr = (cast_type *) calloc (n, size);
Ovennevnte syntaks brukes til å tildele n minneblokker av samme størrelse. Etter at minneplassen er tildelt, initialiseres alle byte til null. Pekeren, som for tiden er ved den første byten i det tildelte minneplassen, returneres.
Eksempel på malloc () i C
I nedenfor-koden brukes sizeof (* ptr) til å tildele en minneblokk på 15 heltall. I printf-setningen finner vi verdien av det 6. heltallet.
#include#include 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));}}
Produksjon:
Verdien av det sjette heltallet er 480
Eksempel på calloc () i C
C-språkprogrammet nedenfor beregner summen av de ti første begrepene. Hvis pekerverdien er null, vil ikke minneområdet bli tildelt.
For loop brukes til å gjenta verdien til en variabel "i" og skrive ut summen. Til slutt brukes funksjonsfri til å frigjøre pekeren.
#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;}
Produksjon:
Bygging og beregning av sekvenssummen av de 10 første begrepene n Sum = 45
Forskjellen mellom calloc () og malloc ()
Herer er viktig forskjell mellom malloc () og calloc ():
malloc () | calloc () |
Malloc () -funksjonen vil lage en enkelt blokk med minne som er angitt av brukeren. | Calloc () -funksjonen kan tilordne flere blokker av minne for en variabel. |
Malloc-funksjonen inneholder søppelverdi. | Minneblokken tildelt av en calloc-funksjon initialiseres alltid til null. |
Antall argumenter er 2. | Antall argumenter er 1. |
Calloc er tregere enn malloc. | Malloc er raskere enn calloc. |
Det er ikke sikkert som å sammenligne med calloc. | Det er sikkert å bruke sammenlignet med malloc. |
Tidseffektivitet er høyere enn calloc (). | Tidseffektivitet 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 minnet. | Den utfører minneinitialisering. |
HOVEDFORSKJELL:
- malloc () -funksjonen returnerer bare startadresse og gjør den ikke null på den annen side, calloc () -funksjonen returnerer startadressen og gjør den null.
- I malloc-funksjon er antall argumenter 2 mens i calloc-funksjon er antall argumenter 1.
- malloc () tidseffektivitet er høyere enn calloc () mens malloc () ikke er sikker sammenlignet med calloc ()
- malloc initialiserer ikke minne mens calloc utfører minneinitialisering.