Malloc () vs calloc (): belangrijkste verschillen uitgelegd met voorbeelden

Inhoudsopgave:

Anonim

Voordat we het verschil leren tussen malloc en calloc, leren we

Wat is dynamische geheugentoewijzing?

Dynamische geheugentoewijzing is een proces waarbij geheugen tijdens runtime wordt toegewezen. Er zijn vier bibliotheekroutines, calloc (), free (), realloc () en malloc () die kunnen worden gebruikt om geheugen toe te wijzen en dit vrij te maken tijdens de uitvoering van het programma. Deze routines zijn gedefinieerd in het header-bestand met de naam stdlib.h.

Wat is malloc ()?

Het is een functie die wordt gebruikt om een ​​geheugenblok dynamisch toe te wijzen. Het reserveert geheugenruimte met een gespecificeerde grootte en retourneert de nulwijzer die naar de geheugenlocatie wijst.

De teruggezonden aanwijzer is meestal van het type void. Het betekent dat we de malloc-functie aan elke aanwijzer kunnen toewijzen. De volledige vorm van malloc is geheugentoewijzing.

In deze tutorial leer je:

  • Wat is dynamische geheugentoewijzing?
  • Wat is malloc ()?
  • Wat is calloc ()?
  • Waarom malloc () gebruiken?
  • Waarom calloc () gebruiken?
  • Syntaxis van malloc ()
  • Syntaxis van calloc ()
  • Voorbeeld van malloc () in C.
  • Voorbeeld van calloc () in C
  • Verschil tussen calloc () en malloc ()

Wat is calloc ()?

De functie Calloc () wordt gebruikt om meerdere geheugenblokken toe te wijzen. Het is een dynamische geheugentoewijzingsfunctie die wordt gebruikt om het geheugen toe te wijzen aan complexe gegevensstructuren zoals arrays en structuren. Als deze functie er niet in slaagt voldoende ruimte toe te wijzen zoals gespecificeerd, retourneert het een null-pointer. De volledige vorm van calloc-functie is aaneengesloten toewijzing.

Waarom malloc () gebruiken?

Hier zijn de redenen om malloc () te gebruiken

  • U moet malloc () gebruiken als u tijdens runtime geheugen moet toewijzen.
  • U moet malloc gebruiken als u objecten moet toewijzen die moeten bestaan ​​buiten de uitvoering van het huidige geheugenblok.
  • Ga voor malloc () als u geheugen moet toewijzen dat groter is dan de grootte van die stapel.
  • Het retourneert de aanwijzer naar de eerste byte van de toegewezen ruimte.
  • Het stelt ontwikkelaars in staat om geheugen toe te wijzen zoals het nodig is in de exacte hoeveelheid.
  • Deze functie wijst een geheugenblokgrootte van bytes uit de heap toe.

Waarom calloc () gebruiken?

Hier zijn de redenen om calloc () te gebruiken

  • Wanneer u het toegewezen geheugen op nul moet zetten.
  • U kunt calloc gebruiken die een aanwijzer retourneert om toegang te krijgen tot de geheugenheap.
  • Wordt gebruikt wanneer u de elementen op nul moet initialiseren om een ​​aanwijzer naar het geheugen terug te sturen.
  • Om overloop te voorkomen is dat mogelijk met malloc ()
  • Gebruik calloc () om een ​​pagina op te vragen waarvan bekend is dat deze al op nul is gezet.

Syntaxis van malloc ()

Hier is een syntaxis van malloc ()

ptr = (cast_type *) malloc (byte_size);

In bovenstaande syntaxis is ptr een pointer van cast_type. De malloc-functie retourneert een pointer naar het toegewezen geheugen van byte_size.

Example: ptr = (int *) malloc (50)

Als deze instructie met succes is uitgevoerd, wordt een geheugenruimte van 50 bytes gereserveerd. Het adres van de eerste byte van gereserveerde ruimte wordt toegewezen aan de pointer "ptr" van het type int.

Syntaxis van calloc ()

Hier is een syntaxis van malloc ()

ptr = (cast_type *) calloc (n, size);

De bovenstaande syntaxis wordt gebruikt om n geheugenblokken van dezelfde grootte toe te wijzen. Nadat de geheugenruimte is toegewezen, worden alle bytes op nul geïnitialiseerd. De pointer, die zich momenteel op de eerste byte van de toegewezen geheugenruimte bevindt, wordt geretourneerd.

Voorbeeld van malloc () in C.

In de balgcode wordt sizeof (* ptr) gebruikt om een ​​geheugenblok van 15 gehele getallen toe te wijzen. In de printf-instructie vinden we de waarde van het 6e gehele getal.

#include#includeint main(){int *ptr;ptr = malloc(15 * sizeof(*ptr));if (ptr != NULL) {*(ptr + 5) = 480;printf("Value of the 6th integer is %d",*(ptr + 5));}}

Uitgang:

De waarde van het 6e gehele getal is 480

Voorbeeld van calloc () in C

Het onderstaande C-taalprogramma berekent de som van de eerste tien termen. Als de pointerwaarde nul is, wordt de geheugenruimte niet toegewezen.

De For-lus wordt gebruikt om de waarde van een variabele "i" te herhalen en de som af te drukken. Ten slotte wordt functievrij gebruikt om de aanwijzer vrij te maken.

#include #include int main() {int i, * ptr, sum = 0;ptr = calloc(10, sizeof(int));if (ptr == NULL) {printf("Error! memory not allocated.");exit(0);}printf("Building and calculating the sequence sum of the first 10 terms \n");for (i = 0; i < 10; ++i) { * (ptr + i) = i;sum += * (ptr + i);}printf("Sum = %d", sum);free(ptr);return 0;}

Uitgang:

Opbouwen en berekenen van de reekssom van de eerste 10 termen n Som = 45

Verschil tussen calloc () en malloc ()

Hier zijn belangrijke verschillen tussen malloc () en calloc ():

malloc () calloc ()
De functie Malloc () maakt een enkel geheugenblok met een door de gebruiker gespecificeerde grootte. De functie Calloc () kan meerdere geheugenblokken voor een variabele toewijzen.
Malloc-functie bevat afvalwaarde. Het geheugenblok toegewezen door een calloc-functie wordt altijd op nul geïnitialiseerd.
Het aantal argumenten is 2. Het aantal argumenten is 1.
Calloc is langzamer dan malloc. Malloc is sneller dan calloc.
Het is niet veilig in vergelijking met calloc. Het is veilig in gebruik in vergelijking met malloc.
Tijdsefficiëntie is hoger dan calloc (). Tijdsefficiëntie is lager dan malloc ().
De functie Malloc () retourneert alleen het startadres en maakt het niet nul. Voordat het adres wordt toegewezen, retourneert de functie Calloc () het startadres en maakt het nul.
Het voert geen geheugeninitialisatie uit. Het voert geheugeninitialisatie uit.

BELANGRIJKSTE VERSCHILLEN:

  • malloc () functie retourneert alleen het startadres en maakt het niet nul aan de andere kant, calloc () functie retourneert het startadres en maakt het nul.
  • In de malloc-functie is het aantal argumenten 2, terwijl in de calloc-functie het aantal argumenten 1 is.
  • malloc () tijdsefficiëntie is hoger dan calloc () terwijl malloc () niet veilig is in vergelijking met calloc ()
  • malloc initialiseert het geheugen niet, terwijl calloc geheugeninitialisatie uitvoert.