het fundamentele verschil tussen malloc en calloc functie is dat calloc () twee argumenten nodig heeft in plaats van één argument dat vereist is door malloc (). Zowel malloc () als calloc () zijn de functies die de programmeertaal C voor dynamische geheugentoewijzing en de-toewijzing op looptijd voorziet.
voordat we malloc() en calloc() functies begrijpen, laten we eerst de Betekenis van dynamische geheugentoewijzing begrijpen. Geheugentoewijzing is de procedure voor het toewijzen van het computergeheugen voor de uitvoering van programma ‘ s en processen. We gebruiken dynamische allocatietechnieken wanneer het niet eerder bekend is hoeveel geheugenruimte er nodig is voor het programma en proces.
dynamische geheugentoewijzing ontstaat als gevolg van problemen in verband met statische geheugentoewijzing, bijvoorbeeld als er minder elementen worden opgeslagen, dan wordt de rest van het geheugen onnodig verspild. Daarom overwint het de problemen van statische geheugentoewijzing waar geheugen alleen wordt toegewezen wanneer het nodig is.
inhoud: malloc() Vs calloc()
- overzicht
- Definitie
- de Belangrijkste Verschillen
- Conclusie
overzicht
Basis van vergelijking | malloc() | calloc() |
---|---|---|
blokken | Wijst één blok eiste geheugen. | wijst meerdere blokken van het gevraagde geheugen toe. |
syntaxis | void * malloc (size_t size); | void * calloc (size_t num, size_t size); |
initialisatie | malloc () verwijdert en initialiseert het toegewezen geheugen niet. | het toegewezen geheugen wordt geïnitialiseerd naar nul met behulp van calloc (). |
wijze van allocatie | malloc () functie wijst geheugen van grootte ‘grootte’ uit de heap toe. | calloc () functie wijst geheugen toe waarvan de grootte gelijk is aan num *grootte. |
snelheid | snel | relatief traag. |
definitie van malloc()
De malloc-functie kent een blok geheugen toe in bytes. De gebruiker moet expliciet de blokgrootte opgeven, die nodig is voor het gebruik.
door middel van malloc functie programma vraagt RAM van het systeem voor toewijzing van het geheugen, als het verzoek wordt toegestaan (dat wil zeggen, de malloc functie zegt succesvol in het toewijzen van geheugen), het retourneert een pointer naar het eerste blok geheugen. Het retourneert void type pointer, dat betekent dat elk type pointer kan worden toegewezen.
hoewel, het geeft een NULL, als de malloc functies niet in staat is om de benodigde hoeveelheid geheugen toe te wijzen. De malloc-functie is toegankelijk in TURBO C, headerbestand alloc.h
of stdlib.h
, en op UNIX zal het beschikbaar zijn in het headerbestand <malloc.h>
.
syntaxis
de syntaxis van deze functie is als volgt:
malloc(number of elements * size of each element);
bijvoorbeeldint *ptr;
ptr=malloc(10*sizeof (int))
waar size de grootte van het benodigde geheugen vertegenwoordigt bytes(d.w.z., het aantal aaneengesloten geheugenlocaties dat moet worden toegewezen).
maar zoals eerder vermeld dat de functie malloc een void pointer retourneert, is een cast operator vereist om het geretourneerde pointertype te wijzigen op basis van onze behoefte, de bovenstaande verklaring kan in de volgende vorm worden gepresenteerd:
ptr_var=(type_cast* ) malloc (size)
waarbij ptr_var
de naam is van de pointer die het beginadres van het toegewezen geheugenblok behoudt, type_cast
het gegevenstype is waarnaar de geretourneerde pointer (of type void) moet worden getransformeerd, en de grootte beschrijft de grootte van het toegewezen geheugenblok in bytes.
bijvoorbeeld:int *ptr;
ptr=(int*) malloc (10 * size of (int));
geheugen toegewezen door malloc functie bevat vuilniswaarde.
merk op dat om te controleren of de overeenkomstige aanvraag wordt gegenereerd door malloc om het geheugen toegewezen door het systeem RAM toe te wijzen, of afgewezen (in het geval als de vereiste ruimte niet beschikbaar is). We kunnen gebruik maken van de eigenschap waarin de benodigde hoeveelheid geheugen niet is toegewezen de malloc functie geeft een NULL.
definitie van calloc ()
De calloc-functie werkt precies hetzelfde als de malloc-functie, met uitzondering van het feit dat het twee argumenten vereist, aangezien in het geval van malloc() slechts één argument nodig is.
bijvoorbeeld:int*ptr;
ptr = (int*)calloc(10,2);
Hier 2 specificeert de grootte van het gegevenstype in een byte waarvoor we de toewijzing willen maken, wat dit geval is 2 voor gehele getallen. En 10 betekent het aantal elementen waarvoor toewijzing moet worden gemaakt.
onthoud dat het argument doorgegeven aan de functie malloc was (n * 10), Het is een enkel argument niet worden verward omdat meerdere argumenten altijd worden gescheiden door komma ‘ s. Het argument (n * 10) heeft geen komma ‘ s tussen. Daarom is het een enkel argument, zij het geen eenvoudig argument, maar een uitdrukking.
terugkerend naar bovenstaande declaratie, wordt na de uitvoering van bovenstaande statement een geheugenblok van 20 bytes toegewezen aan het verzoekende programma en wordt het adres van het eerste blok toegewezen aan het verzoekende programma, en het adres van het eerste blok wordt toegewezen aan de pointer ptr.
geheugen toegewezen door calloc functie houd alle nullen. De calloc-functie is ook beschikbaar in het headerbestand <stdlib.h>
of <alloc.h>
In TURBO C.
belangrijke verschillen tussen malloc en calloc
de primaire verschillen tussen malloc en calloc-functies zijn:
- Eén blok vereist geheugen wordt toegewezen in malloc, terwijl meerdere blokken gevraagd geheugen worden toegewezen door calloc.
- de malloc-functie wis en initialiseert het toegewezen geheugen niet. Het bevat vuilniswaarde en item van het toegewezen geheugen kan niet worden gewijzigd. Calloc initialiseert daarentegen het toegewezen geheugen op nul.
- malloc is sneller dan calloc als gevolg van de eis van extra stappen van initialisatie in de calloc, maar het verschil is verwaarloosbaar.
- een ander verschil tussen deze twee is dat calloc een malloc+memset is, memset wijst de fysieke pagina ‘ s in het geheugen toe terwijl malloc alleen het geheugen van de heap in het virtuele adres toewijst.
conclusie
zowel malloc als calloc functies worden gebruikt voor de toewijzing van het geheugen en hebben hun bepaalde voordeel, en nadeel zoals malloc is snel in vergelijking met calloc. Bovendien is malloc gemakkelijker te gebruiken omdat het slechts één argument vergt omdat calloc geheugen toewijst en geheugengebied met nul initialiseert. Maar je zou liever calloc gebruiken als variabele initialisatie belangrijker voor je is.