Malloc () vs calloc (): Viktiga skillnader förklarade med exempel

Innehållsförteckning:

Anonim

Innan vi lär oss skillnaden mellan malloc och calloc ska vi lära oss-

Vad är dynamisk minnesallokering?

Dynamisk minnesallokering är en process för att allokera minne vid körtid. Det finns fyra biblioteksrutiner, calloc (), free (), realloc () och malloc () som kan användas för att allokera minne och frigöra det under programkörningen. Dessa rutiner definieras i rubrikfilen som heter stdlib.h.

Vad är Malloc ()?

Det är en funktion som används för att allokera ett minnesblock dynamiskt. Den reserverar minnesutrymme av angiven storlek och returnerar nollpekaren som pekar till minnesplatsen.

Pekaren som returneras är vanligtvis ogiltig. Det betyder att vi kan tilldela malloc-funktion till valfri pekare. Den fullständiga formen av malloc är minnestilldelning.

I den här handledningen lär du dig:

  • Vad är dynamisk minnesallokering?
  • Vad är Malloc ()?
  • Vad är calloc ()?
  • Varför använda malloc ()?
  • Varför använda calloc ()?
  • Syntax för malloc ()
  • Syntax för calloc ()
  • Exempel på malloc () i C.
  • Exempel på calloc () i C.
  • Skillnaden mellan calloc () och malloc ()

Vad är calloc ()?

Calloc () -funktionen används för att allokera flera minnesblock. Det är en dynamisk minnesallokeringsfunktion som används för att allokera minnet till komplexa datastrukturer såsom matriser och strukturer. Om den här funktionen misslyckas med att tilldela tillräckligt med utrymme enligt specifikationen returnerar den nullpekaren. Den fullständiga formen av calloc-funktion är sammanhängande allokering.

Varför använda malloc ()?

Här är skälen till att använda malloc ()

  • Du bör använda malloc () när du måste allokera minne vid körning.
  • Du bör använda malloc när du måste allokera objekt som måste finnas utanför körningen av det aktuella minnesblocket.
  • Gå till malloc () om du behöver allokera minne som är större än storleken på den stacken.
  • Den returnerar pekaren till den första byten av tilldelat utrymme.
  • Det gör det möjligt för utvecklare att allokera minne efter behov i exakt mängd.
  • Denna funktion tilldelar en minnesblockstorlek på byte från högen.

Varför använda calloc ()?

Här är skälen till att använda calloc ()

  • När du måste ställa in tilldelat minne till noll.
  • Du kan använda calloc som returnerar en pekare för att få tillgång till minneshög.
  • Används när du behöver initialisera elementen till noll för att returnera en pekare till minnet.
  • För att förhindra överflöd som är möjligt med malloc ()
  • Använd calloc () för att begära en sida som är känd för att redan har nollställts.

Syntax för malloc ()

Här är en syntax av malloc ()

ptr = (cast_type *) malloc (byte_size);

I ovanstående syntax är ptr en pekare av cast_type. Malloc-funktionen returnerar en pekare till det tilldelade minnet av byte_size.

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

När detta uttalande har utförts reserveras ett minnesutrymme på 50 byte. Adressen till den första byten med reserverat utrymme tilldelas pekaren "ptr" av typen int.

Syntax för calloc ()

Här är en syntax av malloc ()

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

Ovanstående syntax används för att allokera n minnesblock av samma storlek. Efter att minnesutrymmet har tilldelats initialiseras alla byte till noll. Pekaren, som för närvarande är vid den första byten i det tilldelade minnesutrymmet, returneras.

Exempel på malloc () i C.

I nedanstående kod används sizeof (* ptr) för att allokera ett minnesblock på 15 heltal. I printf-uttalandet hittar vi värdet på det sjätte heltalet.

#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));}}

Produktion:

Värdet på det sjätte heltalet är 480

Exempel på calloc () i C.

C-språkprogrammet nedan beräknar summan av de första tio termerna. Om pekvärdet är noll allokeras inte minnesutrymmet.

For loop används för att upprepa värdet på en variabel "i" och skriva ut summan. Slutligen används funktionsfri för att frigöra pekaren.

#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;}

Produktion:

Bygga och beräkna sekvenssumman för de första 10 termerna n Summa = 45

Skillnaden mellan calloc () och malloc ()

Här är viktig skillnad mellan malloc () och calloc ():

malloc () calloc ()
Malloc () -funktionen skapar ett enda minnesblock av storlek som anges av användaren. Calloc () -funktionen kan tilldela flera minnesblock för en variabel.
Malloc-funktionen innehåller skräpvärde. Minnesblocket tilldelat av en calloc-funktion initialiseras alltid till noll.
Antal argument är 2. Antal argument är 1.
Calloc är långsammare än malloc. Malloc är snabbare än calloc.
Det är inte säkert att jämföra med calloc. Det är säkert att använda jämfört med malloc.
Tidseffektiviteten är högre än calloc (). Tidseffektiviteten är lägre än malloc ().
Malloc () -funktionen returnerar endast startadressen och gör den inte noll. Innan adressen tilldelas returnerar funktionen Calloc () startadressen och gör den noll.
Det utför inte initialisering av minnet. Den utför minnesinitialisering.

VÄSENTLIGA SKILLNADER:

  • malloc () -funktionen returnerar bara startadressen och gör den inte noll å andra sidan, calloc () -funktionen returnerar startadressen och gör den noll.
  • I malloc-funktionen är antalet argument 2 medan i calloc-funktionen är antalet argument 1.
  • malloc () tidseffektivitet är högre än calloc () medan malloc () inte är säker jämfört med calloc ()
  • malloc initialiserar inte minnet medan calloc utför minnesinitialisering.