Aanbevolen, 2024

Editor'S Choice

Verschil tussen malloc en calloc

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 () en calloc () zijn de functies die de C-programmeertaal biedt voor dynamische geheugentoewijzing en de-toewijzing tijdens runtime.

Voordat we de functies malloc () en calloc () gaan begrijpen, moeten 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 toewijzingstechnieken wanneer niet bekend is hoeveel geheugenruimte er nodig is voor het programma en het proces.

Dynamische geheugentoewijzing ontstaat als gevolg van de problemen die zijn verbonden met statische geheugentoewijzing, zoals als minder elementen worden opgeslagen, dan wordt de rest van het geheugen onnodig verspild. Daarom overwint het de problemen van statische geheugentoewijzing waarbij geheugen alleen wordt toegewezen wanneer dit vereist is.

Vergelijkingstabel

Vergelijkingsgrondslagmalloc ()calloc ()
Nee van blokkenWijst een enkel blok van gevraagde geheugen toe.
Wijst meerdere blokken van het gevraagde geheugen toe.
Syntaxisvoid * malloc (size_t size);void * calloc (size_t num, size_t size);
initialisatiemalloc () wist het toegewezen geheugen niet en initialiseert het.Het toegewezen geheugen wordt geïnitialiseerd naar nul met behulp van calloc ().
Wijze van ToewijzingDe functie malloc () wijst geheugen van de grootte 'grootte' toe uit de heap.calloc () functie wijst geheugen toe waarvan de grootte gelijk is aan num * size.
SnelheidSnelRelatief traag.

Definitie van malloc ()

De malloc- functie kent een blok geheugen toe in bytes . De gebruiker moet expliciet de blokgrootte opgeven die voor het gebruik vereist is.

Door middel van malloc-functie programma verzoekt RAM van het systeem voor toewijzing van het geheugen, als het verzoek wordt toegegeven (dat wil zeggen, de malloc-functie zegt succesvol in het toewijzen van geheugen), retourneert het een verwijzing naar het eerste blok geheugen. Het geeft een ongeldig type aanwijzer terug, dit betekent dat elk type aanwijzer kan worden toegewezen.

Hoewel het een NULL retourneert, als de malloc-functies niet in staat zijn om de vereiste hoeveelheid geheugen toe te wijzen. De malloc-functie is toegankelijk in TURBO C, headerbestand alloc.h of stdlib.h, en op UNIX zal deze beschikbaar zijn in het header-bestand .

SYNTAXIS

De syntaxis van deze functie is als volgt:

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

bijvoorbeeld,
int *ptr;
ptr=malloc(10*sizeof (int))

Waarbij de grootte de grootte is van het geheugen dat nodig is in bytes (dwz het aantal aaneengesloten geheugenlocaties dat moet worden toegewezen).

Maar zoals eerder vermeld, retourneert de functie malloc een lege aanwijzer. Als gevolg hiervan moet een cast-operator het geretourneerde aanwijzertype op basis van onze behoefte wijzigen. De bovenstaande verklaring kan in de volgende vorm worden weergegeven:

ptr_var=(type_cast* ) malloc (size)

Waar ptr_var de naam is van de aanwijzer die het startadres van het toegewezen geheugenblok behoudt, is type_cast het gegevenstype waarin de geretourneerde aanwijzer (of het type ongeldig) 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 afvalwaarde .

Merk op dat om te controleren of het overeenkomstige verzoek wordt gegenereerd door malloc om het door het systeem-RAM toegewezen geheugen toe te wijzen of te weigeren (in het geval dat, indien nodig, geen ruimte beschikbaar is). We kunnen gebruik maken van de eigenschap waarin de benodigde hoeveelheid geheugen niet is toegewezen. De functie malloc retourneert een NULL.

Definitie van calloc ()

De calloc- functie werkt precies hetzelfde als de malloc- functie, met uitzondering van het feit dat hiervoor twee argumenten nodig zijn, omdat in het geval van malloc () slechts één argument nodig is.

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

Hier specificeert 2 de grootte van het gegevenstype in een byte waarvoor we de toewijzing willen maken, wat in dit geval 2 is voor gehele getallen. En 10 duiden het aantal elementen aan waarvoor toewijzing moet worden gemaakt.

Vergeet niet dat het argument dat is doorgegeven aan de functie malloc (n * 10) was, het is een enkel argument, niet in verwarring wordt gebracht, omdat meerdere argumenten altijd worden gescheiden door komma's. Het argument (n * 10) bevat geen komma's ertussen. Daarom is het een enkel argument, hoewel niet een eenvoudig maar een uitdrukking.

Terugkerend naar de bovenstaande verklaring, na het uitvoeren van de bovenstaande instructie, wordt een geheugenblok van 20 bytes toegewezen aan het opvragende programma en wordt het adres van het eerste blok toegewezen aan het verzoekende programma en wordt het adres van het eerste blok toegewezen aan de aanwijzer ptr.

Geheugen toegewezen door calloc-functie bevatten allemaal nullen. De calloc-functie is ook verkrijgbaar in het headerbestand of in TURBO C.

Belangrijkste verschillen tussen malloc en calloc

De belangrijkste verschillen tussen malloc en calloc-functies zijn:

  1. Een enkel blok van gevraagd geheugen wordt toegewezen in malloc, terwijl meerdere blokken opgevraagd geheugen worden toegewezen door calloc.
  2. De malloc-functie wist het toegewezen geheugen niet en initialiseert het. Het bevat de afvalwaarde en het item van het toegewezen geheugen kan niet worden gewijzigd. Daarentegen initialiseert calloc het toegewezen geheugen naar nul.
  3. malloc is sneller dan calloc vanwege de vereiste van extra initialisatiestappen in de calloc, maar het verschil is verwaarloosbaar.
  4. 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 toewijzing van het geheugen en hebben hun bepaald voordeel, en nadeel zoals malloc is snel in vergelijking met calloc. Bovendien is malloc eenvoudiger te gebruiken omdat het maar één argument kost, omdat calloc geheugen toewijst en geheugenruimte initialiseert met NUL. Maar u wilt liever calloc gebruiken wanneer variabele initialisatie belangrijker voor u is.

Top