Skillnaden mellan malloc() och calloc()

Nyckelskillnader mellan malloc() och calloc()

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

Vad är dynamisk minnesallokering?

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

Vad är malloc()?

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

Pekaren som returneras är vanligtvis av typen void. Det betyder att vi kan tilldela malloc-funktion till vilken pekare som helst. Den fullständiga formen av malloc är minnesallokering.

Vad är calloc()?

Calloc() funktion används för att allokera flera minnesblock. Det är en dynamisk minnesallokeringsfunktion som används för att allokera minnet till komplexa datastrukturer som arrayer och strukturer. Om denna funktion misslyckas med att allokera tillräckligt med utrymme som specificerat, returnerar den nollpekare. Den fullständiga formen av calloc-funktionen är kontinuerlig allokering.

Skillnaden mellan malloc() och calloc()

Här är viktiga skillnader mellan malloc() och calloc():

malloc () calloc()
Malloc()-funktionen kommer att skapa ett enda minnesblock av storlek som specificeras av användaren. Funktionen Calloc() kan tilldela flera minnesblock för en variabel.
Malloc-funktionen innehåller skräpvärde. Minnesblocket som allokeras av en calloc-funktion initieras alltid till noll.
Antalet argument är 1. Antalet argument är 2.
Calloc är långsammare än malloc. Malloc är snabbare än calloc.
Det är inte säkert jämfört med calloc. Den är säker 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 allokeras returnerar funktionen Calloc() startadressen och gör den noll.
Den utför inte initiering av minnet. Den utför minnesinitiering.

Syntax för malloc()

Här är en syntax för 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 denna sats exekveras framgångsrikt, reserveras ett minnesutrymme på 50 byte. Adressen för den första byten av reserverat utrymme tilldelas pekaren "ptr" av typen int.

Syntax för calloc()

Här är en syntax för 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 allokerats initialiseras alla byte till noll. Pekaren, som för närvarande befinner sig vid den första byten av det tilldelade minnesutrymmet, returneras.

Exempel på malloc() i C

I koden nedan används sizeof(*ptr) för att allokera ett minnesblock med 15 heltal. I printf-satsen hittar vi värdet på det sjätte heltal.

#include<stdlib.h>
#include<stdio.h>
int 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 för det sjätte heltal är 6

Exempel på calloc() i C

C-språkprogrammet nedan beräknar summan av de första tio termerna. Om pekarvärdet är null, kommer minnesutrymmet inte att tilldelas.

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

#include <stdio.h>
#include <stdlib.h>
    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

Varför använda malloc() ?

Här är anledningarna 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 existera bortom exekveringen 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 som det behövs i den exakta mängden.
  • Denna funktion allokerar en minnesblockstorlek av byte från högen.

Varför använda calloc() ?

Här är anledningarna till att använda calloc()

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