Anbefalet, 2024

Redaktørens Valg

Forskel mellem malloc og calloc

Den grundlæggende forskel mellem malloc og calloc funktion er, at calloc () har brug for to argumenter i stedet for et argument, som kræves af malloc () . Både malloc () og calloc () er de funktioner, som C-programmeringssprog giver mulighed for dynamisk hukommelseallokering og de-allokering i løbetid.

Før du forstår malloc () og calloc () funktioner, lad os først forstå betydningen af ​​dynamisk hukommelseallokering. Hukommelsesallokering er fremgangsmåden til tildeling af computerhukommelse til udførelse af programmer og processer. Vi bruger dynamiske allokeringsteknikker, når det ikke er kendt forud for hvor meget hukommelsesplads der er brug for til programmet og processen.

Dynamisk hukommelsesallokering opstår på grund af problemerne forbundet med statisk hukommelsesallokering, såsom hvis færre elementer er gemt, så bliver resten af ​​hukommelsen spildt unødigt. Derfor overvinder den problemerne med statisk hukommelsesallokering, hvor hukommelsen kun tildeles, når den er påkrævet.

Sammenligningstabel

Grundlag for sammenligningmalloc ()calloc ()
Antal blokkeTildeler enkelt blok af krævet hukommelse.
Tildeler flere blokke af den anmodede hukommelse.
Syntaksvoid * malloc (size_t størrelse);void * calloc (size_t num, size_t størrelse);
Initialiseringmalloc () sletter ikke og initialiserer den tildelte hukommelse.Den tildelte hukommelse initialiseres til nul ved at bruge calloc ().
Tildelingens mådemalloc () -funktionen tildeler hukommelse af størrelse 'størrelse' fra bunken.calloc () -funktionen allokerer hukommelse, hvis størrelse er lig med num * størrelse.
HastighedHurtigRelativt langsomt.

Definition af malloc ()

Malloc- funktionen tildeler en blok af hukommelse i bytes . Brugeren skal udtrykkeligt angive den blokstørrelse, den kræver til brug.

Ved hjælp af malloc-funktionsprogram anmodninger RAM for systemet til tildeling af hukommelsen, hvis anmodningen indrømmes (dvs. malloc-funktionen siger succesfuld i tildeling af hukommelse), returnerer den en peger til den første blok af hukommelse. Det returnerer void type pointer, det betyder, at enhver type pointer kan tildeles.

Selvom det returnerer en NULL, hvis malloc funktionerne ikke er i stand til at allokere den nødvendige mængde hukommelse. Malloc-funktionen er tilgængelig i TURBO C, header fil alloc.h eller stdlib.h, og i UNIX vil den være tilgængelig i headerfilen .

SYNTAX

Syntaks af denne funktion er som følger:

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

for eksempel,
int *ptr;
ptr=malloc(10*sizeof (int))

Hvor størrelse repræsenterer størrelsen på hukommelse, der kræves i bytes (dvs. antallet af sammenhængende hukommelsessteder, der skal tildeles).

Men som tidligere nævnt returnerer funktionen malloc en tomrummer, og derfor kræves en cast operatør at ændre den returnerede pegertype baseret på vores behov, kan ovennævnte erklæring præsenteres i følgende form:

ptr_var=(type_cast* ) malloc (size)

Hvor ptr_var er navnet på pegeren, der bevarer startadressen for den tildelte hukommelsesblok, er type_cast den datatype, hvori den returnerede peger (eller type tomrum) skal transformeres, og størrelsen beskriver størrelsen af ​​den allokerede hukommelsesblok i bytes .

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

Hukommelse tildelt ved malloc-funktionen indeholder affaldsværdi .

Bemærk at for at bekræfte, at hvis den tilsvarende forespørgsel genereres af malloc for at allokere hukommelsen, der er givet af system RAM, eller afvises (hvis det kræves, at plads ikke er tilgængeligt). Vi kan gøre brug af den ejendom, hvor den nødvendige mængde hukommelse ikke er tildelt. Malloc-funktionen returnerer en NULL.

Definition af calloc ()

Calloc- funktionen fungerer præcis som malloc- funktionen, undtagen det faktum, at det kræver to argumenter som i tilfældet med malloc () kun ét argument er nødvendigt.

For eksempel:
int*ptr;
ptr = (int*)calloc(10, 2);

Her 2 specificerer størrelsen af ​​datatypen i en byte, for hvilken vi ønsker tildelingen skal foretages, hvilket er denne sag er 2 for heltal. Og 10 angiver antallet af elementer, for hvilke tildeling skal foretages.

Husk at argumentet gik til funktionen malloc var (n * 10), det er et enkelt argument, ikke forveksles, fordi flere argumenter altid adskilles af kommaer. Argumentet (n * 10) har ingen kommaer imellem. Derfor er det et enkelt argument, men ikke en simpel men et udtryk.

Efter tilbagekaldelsen af ​​ovenstående erklæring tildeles en hukommelsesblok på 20 bytes efter udførelsen af ​​ovennævnte sætning til det anmodende program, og adressen til den første blok er tildelt det anmodende program, og adressen til den første blok er tildelt pegeren ptr.

Hukommelse tildelt af calloc-funktion, hold alle nuller. Calloc-funktionen kan også opnås i headerfilen eller i TURBO C.

Nøgleforskelle mellem malloc og calloc

De primære forskelle mellem malloc og calloc funktioner er:

  1. En enkelt blok af krævet hukommelse er tildelt i malloc, mens flere blokke af anmodet hukommelse er allokeret af calloc.
  2. Malloc-funktionen sletter ikke og initialiserer den tildelte hukommelse. Den indeholder affaldsværdi, og elementet i den tildelte hukommelse kan ikke ændres. I modsætning hertil initialiserer calloc den tildelte hukommelse til nul.
  3. malloc er hurtigere end calloc på grund af kravet om yderligere trin af initialisering i calloc men forskellen er ubetydelig.
  4. En anden forskel mellem disse to er, at calloc er en malloc + memset, memset tildeler de fysiske sider i hukommelsen, mens malloc kun tildeler hukommelsen fra bunken i den virtuelle adresse.

Konklusion:

Både malloc- og calloc-funktioner bruges til tildeling af hukommelsen og har deres særlige fordel, og ulempen er, at malloc er hurtig i forhold til calloc. Desuden er malloc lettere at bruge, da det kun tager et argument, fordi calloc tildeler hukommelse og initialiserer hukommelsesområde med ZERO. Men du foretrækker at bruge calloc, når variabel initialisering er vigtigere for dig.

Top