den grundlæggende forskel mellem malloc og calloc-funktion er, at calloc() har brug for to argumenter i stedet for et argument, der kræves af malloc(). Både malloc () og calloc () er de funktioner, som C programmeringssprog giver mulighed for dynamisk hukommelsesallokering og deallokering på kørselstid.
før forståelse af malloc() og calloc() funktioner lad os først forstå betydningen af dynamisk hukommelsesallokering. Hukommelsesallokering er proceduren for tildeling af computerens hukommelse til udførelse af programmer og processer. Vi bruger dynamiske allokeringsteknikker, når det ikke vides tidligere, hvor meget hukommelsesplads der er behov 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, spildes resten af hukommelsen unødigt. Derfor overvinder det problemerne med statisk hukommelsesallokering, hvor hukommelsen kun tildeles, når det er nødvendigt.
indhold: malloc() Vs calloc()
- Sammenligning Chart
- Definition
- nøgleforskelle
- konklusion
Sammenligning Chart
sammenligningsgrundlag | malloc() | calloc() |
---|---|---|
ingen blokke | tildeler en enkelt blok af krævet hukommelse. | tildeler flere blokke af den ønskede hukommelse. |
syntaks | void *malloc(størrelse_t størrelse); | void * calloc(størrelse_t num, størrelse_t størrelse); |
initialisering | malloc() rydder ikke og initialiserer den tildelte hukommelse. | den tildelte hukommelse initialiseres til nul ved hjælp af calloc(). |
Allokeringsmåde | malloc() funktion tildeler hukommelse af størrelse ‘størrelse’ fra bunken. | calloc() funktion tildeler hukommelse, hvis størrelse er lig med num * størrelse. |
hastighed | hurtig | forholdsvis langsom. |
Definition af malloc()
malloc-funktionen tildeler en hukommelsesblok i bytes. Brugeren skal eksplicit give blokstørrelsen, den kræver til brug.
gennem malloc funktion program anmoder RAM af systemet til tildeling af hukommelsen, hvis anmodningen er indrømmet (dvs.malloc funktion siger succes i tildeling af hukommelse), det returnerer en pointer til den første blok af hukommelse. Det returnerer ugyldig 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 krævede mængde hukommelse. Malloc-funktionen er tilgængelig i TURBO C, header file alloc.h
eller stdlib.h
, og på unik vil den være tilgængelig i header-filen <malloc.h>
.
syntaks
syntaksen for denne funktion er som følger:
malloc(number of elements * size of each element);
for eksempelint *ptr;
ptr=malloc(10*sizeof (int))
hvor størrelse repræsenterer størrelsen af hukommelse, der kræves i bytes(dvs., antallet af sammenhængende hukommelsesplaceringer, der skal tildeles).
men som nævnt før, at funktionen malloc returnerer en ugyldig markør, er det derfor nødvendigt, at en cast-operatør ændrer den returnerede pegertype baseret på vores behov, ovenstående erklæring kan præsenteres i følgende form:
ptr_var=(type_cast* ) malloc (size)
hvor ptr_var
er navnet på markøren, der bevarer startadressen for den tildelte hukommelsesblok, type_cast
er den datatype, som den returnerede markør (eller type void) skal transformeres i, og størrelse beskriver størrelsen på den tildelte hukommelsesblok, og størrelsen på den tildelte hukommelse er hukommelse blok i bytes.
for eksempel:
int *ptr;
ptr=(int*) malloc (10 * size of (int));
hukommelse allokeret af malloc-funktion indeholder affaldsværdi.
Bemærk, at for at kontrollere, at hvis den tilsvarende anmodning er genereret af malloc at allokere hukommelse givet af systemet RAM, eller afvist (i tilfælde, hvis det kræves plads er ikke tilgængelig). Vi kan gøre brug af ejendommen, hvor den nødvendige mængde hukommelse ikke er tildelt malloc-funktionen returnerer en NULL.
Definition af calloc ()
calloc-funktionen fungerer nøjagtigt det samme som malloc-funktionen eksklusive det faktum, at det kræver to argumenter som i tilfælde af malloc() kun et argument er nødvendigt.
for eksempel:int*ptr;
ptr = (int*)calloc(10,2);
Her 2 angiver størrelsen af datatypen i en byte, som vi ønsker, at tildelingen skal foretages, hvilket er dette tilfælde er 2 for heltal. Og 10 angiver antallet af elementer, for hvilke der skal foretages tildeling.
Husk, at argumentet overført 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 et simpelt, men et udtryk.
vender tilbage til ovenstående erklæring, efter udførelsen af ovenstående erklæring tildeles en hukommelsesblok på 20 bytes til det anmodende program, og adressen på den første blok tildeles det anmodende program, og adressen på den første blok tildeles markøren ptr.
hukommelse tildelt af calloc funktion hold alle nuller. Calloc-funktionen kan også fås i headerfilen <stdlib.h>
eller <alloc.h>
i TURBO C.
nøgleforskelle mellem malloc og calloc
de primære forskelle mellem malloc-og calloc-funktioner er:
- en enkelt blok af krævet hukommelse tildeles i malloc, mens flere blokke af anmodet hukommelse tildeles af calloc.funktionen malloc rydder 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.malloc er hurtigere end calloc på grund af kravet om yderligere trin til initialisering i calloc, men forskellen er ubetydelig.
- en anden forskel mellem disse to er, at calloc er et 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 bestemte fordel, og ulempe som malloc er hurtig sammenlignet med calloc. Desuden er malloc lettere at bruge, da det kun tager et argument, fordi calloc tildeler hukommelse og initialiserer hukommelsesområde med nul. Men du foretrækker at bruge calloc, når variabel initialisering er vigtigere for dig.