den grunnleggende forskjellen mellom malloc og calloc-funksjonen er at calloc() trenger to argumenter i stedet for ett argument som kreves av malloc(). Både malloc () og calloc () er funksjonene Som c programmeringsspråk gir for dynamisk minneallokering og deallokering under kjøring.
før forstå malloc() og calloc() funksjoner først la oss forstå betydningen av dynamisk minnetildeling. Minneallokering er prosedyren for å tildele datamaskinens minne for utførelse av programmer og prosesser. Vi bruker dynamiske allokeringsteknikker når det ikke er kjent før hvor mye minneplass som trengs for programmet og prosessen.Dynamisk minneallokering oppstår på grunn av problemene knyttet til statisk minneallokering, for eksempel hvis færre elementer lagres, blir resten av minnet unødvendig bortkastet. Derfor overvinter det problemene med statisk minneallokering der minnet kun tildeles når det er nødvendig.
Innhold: malloc() Vs calloc()
- Sammenligning Diagram
- Definisjon
- Nøkkelforskjeller
- Konklusjon
Sammenligning Diagram
Grunnlag for sammenligning | malloc () | calloc () |
---|---|---|
ingen blokker | tilordner enkelt blokk med etterspurt minne. | Tilordner flere blokker av det forespurte minnet. |
Syntaks | void *malloc(size_t størrelse); | void *calloc (size_t num, size_t størrelse); |
initialisering | malloc() fjerner ikke og initialiserer det tildelte minnet. | det tildelte minnet initialiseres til null ved hjelp av calloc (). |
Måte For Tildeling | malloc () – funksjonen tildeler minne av størrelse ‘størrelse’ fra haugen.calloc () – funksjonen tildeler minne hvis størrelse er lik num * størrelse. | |
Hastighet | Rask | Relativt sakte. |
definisjon av malloc ()
malloc-funksjonen tilordner en minneblokk i byte. Brukeren bør eksplisitt gi blokkstørrelsen, det krever bruk.gjennom malloc-funksjonsprogrammet ber OM RAM i systemet for tildeling av minnet, hvis forespørselen er innrømmet (dvs.malloc-funksjonen sier vellykket tildeling av minne), returnerer den en peker til den første minneblokken. Den returnerer ugyldig type peker, det betyr at alle typer peker kan tilordnes.
Selv om DET returnerer NULL, hvis malloc-funksjonene ikke kan tildele den nødvendige mengden minne. Malloc-funksjonen er tilgjengelig i TURBO c, headerfil alloc.h
eller stdlib.h
, OG PÅ UNIX vil den være tilgjengelig i headerfilen <malloc.h>
.
SYNTAKS
syntaksen for denne funksjonen er som følger:
malloc(number of elements * size of each element);
for eksempelint *ptr;
ptr=malloc(10*sizeof (int))
hvor størrelsen representerer størrelsen på minnet som kreves i byte(dvs., antall sammenhengende minnesteder som skal tildeles).
Men som nevnt før at funksjonen malloc returnerer en tom peker, er det derfor nødvendig med en cast-operatør for å endre den returnerte pekertypen basert på vårt behov.:
ptr_var=(type_cast* ) malloc (size)
Hvor ptr_var
er navnet på pekeren som beholder startadressen til tildelt minneblokk, type_cast
er datatypen som den returnerte pekeren (eller typen tomrom) skal transformeres til, og størrelsen beskriver størrelsen på den tildelte minneblokken.minneblokk i byte.
For eksempel: int *ptr;
ptr=(int*) malloc (10 * size of (int));
Minne tildelt av malloc-funksjonen inneholder søppelverdi.
Merk at for å bekrefte at hvis den tilsvarende forespørselen er generert av malloc å tildele minnet gitt av system RAM, eller avvist(i tilfelle hvis nødvendig plass ikke er tilgjengelig). Vi kan gjøre bruk av egenskapen der den nødvendige mengden minne ikke er tildelt malloc-funksjonen returnerer NULL.
Definisjon av calloc ()
calloc-funksjonen fungerer nøyaktig samme som malloc-funksjonen, unntatt det faktum at det krever to argumenter som i tilfelle malloc () bare ett argument er nødvendig.
for eksempel:int*ptr;
ptr = (int*)calloc(10,2);
her 2 angir størrelsen på datatypen i en byte som vi vil at tildelingen skal gjøres, som er dette tilfellet er 2 for heltall. Og 10 angir antall elementer som tildeling skal gjøres for.
Husk at argumentet gikk til funksjonen malloc var (n*10), det er et enkelt argument ikke bli forvirret fordi flere argumenter alltid er atskilt med komma. Argumentet (n*10) har ingen kommaer i mellom. Derfor er det et enkelt argument, men ikke en enkel, men et uttrykk.
Tilbake til ovennevnte erklæring, etter utførelsen av ovennevnte setning, tildeles en minneblokk på 20 byte til det anmodende programmet, og adressen til den første blokken tildeles pekeren ptr.
Minne tildelt av calloc-funksjonen hold alle nuller. Calloc-funksjonen er også tilgjengelig i topptekstfilen <stdlib.h>
eller <alloc.h>
I TURBO C.
Nøkkelforskjeller mellom malloc og calloc
de primære forskjellene mellom malloc og calloc-funksjoner er:
- en enkelt blokk med etterspurt minne tildeles i malloc mens flere blokker med forespurt minne tildeles av calloc.
- malloc-funksjonen sletter ikke og initialiserer det tildelte minnet. Den inneholder soppel verdi og element av det tildelte minnet kan ikke endres. I kontrast initialiserer calloc det tildelte minnet til null.malloc er raskere enn calloc på grunn av kravet om ytterligere trinn for initialisering i calloc, men forskjellen er ubetydelig.en annen forskjell mellom disse to er at calloc er et malloc+memset, memset tildeler de fysiske sidene i minnet mens malloc bare tildeler minnet fra bunken i den virtuelle adressen.
Konklusjon
både malloc og calloc-funksjoner brukes Til tildeling av minnet og har en viss fordel, og ulempe som malloc er rask i forhold til calloc. Videre malloc enklere å bruke som det tar bare ett argument fordi calloc tildeler minne og initialisere minneområdet MED NULL. Men du foretrekker å bruke calloc når variabel initialisering er viktigere for deg.