Anbefalt, 2024

Redaksjonens

Forskjell mellom malloc og calloc

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åket gir dynamisk minneallokering og deallokering på kjøretid.

Før du forstår malloc () og calloc () -funksjonene, må du først forstå betydningen av dynamisk minneallokering. Minneallokering er prosedyren for tildeling av datamaskinminne for utførelse av programmer og prosesser. Vi bruker dynamiske allokeringsteknikker når det ikke er kjent før hvor mye minneplass er nødvendig 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ødig bortkastet. Derfor overvinner den problemene med statisk minneallokering hvor minnet tildeles bare når det er nødvendig.

Sammenligningstabel

Grunnlag for sammenligningmalloc ()calloc ()
Antall blokkerTilordner enkelt blokk med krevende minne.
Tilordner flere blokker av det forespurte minnet.
syntaxvoid * malloc (size_t størrelse);void * calloc (size_t num, size_t størrelse);
initialiseringmalloc () sletter ikke og initialiserer det tildelte minnet.Det tildelte minnet initialiseres til null ved hjelp av calloc ().
Manner for allokeringmalloc () -funksjonen tildeler minne om størrelse 'størrelse' fra bunken.calloc () -funksjonen tildeler minne som har samme størrelse som num * størrelse.
HastighetRaskSammenlignet sakte.

Definisjon av malloc ()

Malloc- funksjonen tilordner en blokk med minne i byte . Brukeren skal eksplisitt gi blokkstørrelsen, den krever for bruken.

Ved hjelp av malloc-funksjonsprogrammet forespørsler RAM i systemet for allokering av minnet, hvis forespørselen er innrømmet (dvs. malloc-funksjonen sier vellykket ved å tildele minne), returnerer den en peker til den første blokk av minne. Den returnerer void type peker, det betyr at en hvilken som helst type peker kan tilordnes.

Selv om det returnerer en NULL, hvis malloc-funksjonene ikke er i stand til å 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 .

SYNTAX

Syntaxen til denne funksjonen er som følger:

malloc(number of elements * size of each element);

for eksempel,
int *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 tidligere, returnerer funksjonen malloc en tomrompeker, og derfor må en kastet operatør endre den returnerte pekertypen basert på vårt behov. Ovenstående erklæring kan presenteres i følgende form:

ptr_var=(type_cast* ) malloc (size)

Hvor ptr_var er navnet på pekeren som beholder startadressen til tildelt minneblokk, er type_cast den datatypen som den returnerte pekeren (eller type tomrom) skal transformeres til, og størrelsen beskriver størrelsen på den tildelte minneblokken i byte .

For eksempel:
int *ptr;
ptr=(int*) malloc (10 * size of (int));

Minne tildelt av malloc-funksjonen inneholder søppelverdi .

Merk at for å verifisere at hvis den tilsvarende forespørselen genereres av malloc for å tildele minnet som er gitt av system RAM, eller avvist (i tilfelle om nødvendig er ikke ledig plass). Vi kan bruke eiendommen der den nødvendige mengden minne ikke er tildelt malloc-funksjonen returnerer en 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 spesifiseres størrelsen på datatypen i en byte som vi vil ha allokering til, hvilket er dette tilfellet er 2 for heltall. Og 10 angir antall elementer for hvilke allokering skal gjøres.

Husk at argumentet som ble sendt til funksjonen malloc var (n * 10), det er et enkelt argument, ikke forveksles fordi flere argumenter alltid skilles med kommaer. Argumentet (n * 10) har ingen kommaer i mellom. Derfor er det et enkelt argument, men ikke en enkel, men et uttrykk.

Tilbakeføring til den ovennevnte erklæring, etter utførelsen av ovennevnte utsagn, tildeles en minneblokk på 20 byte til det forespørrende programmet, og adressen til den første blokk er tilordnet det forespørrende programmet og adressen til den første blokk er tilordnet pekeren ptr.

Minne allokert av calloc-funksjonen, hold alle nuller. Calloc-funksjonen er også tilgjengelig i headerfilen eller i TURBO C.

Nøkkelforskjeller mellom malloc og calloc

De primære forskjellene mellom malloc og calloc funksjoner er:

  1. En enkelt blokk med krevende minne er tildelt i malloc mens flere blokker med forespurt minne er allokert av calloc.
  2. Malloc-funksjonen sletter ikke og initialiserer det tildelte minnet. Den inneholder søppelverdi og elementet i det tildelte minnet kan ikke endres. I kontrast initierer calloc det tildelte minnet til null.
  3. malloc er raskere enn calloc på grunn av kravet om ytterligere trinn med initialisering i calloc, men forskjellen er ubetydelig.
  4. En annen forskjell mellom disse to er at calloc er en malloc + memset, memset tildeler de fysiske sidene i minnet mens malloc bare tilordner minnet fra bunken i den virtuelle adressen.

Konklusjon:

Både malloc og calloc funksjoner brukes til allokering av minnet og har deres spesielle fordel, og ulemper som malloc er rask i forhold til calloc. Videre er malloc lettere å bruke, da det bare tar ett argument fordi calloc tildeler minne og initialiserer minnesområdet med null. Men du foretrekker å bruke calloc når variabel initialisering er viktigere for deg.

Top