Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

malloc() vs calloc():Belangrijkste verschillen uitgelegd met voorbeelden

Laten we, voordat we het verschil tussen malloc en calloc leren, leren-

Wat is dynamische geheugentoewijzing?

Dynamische geheugentoewijzing is een proces waarbij geheugen wordt toegewezen tijdens runtime. Er zijn vier bibliotheekroutines, calloc(), free(), realloc() en malloc() die kunnen worden gebruikt om geheugen toe te wijzen en vrij te maken tijdens de uitvoering van het programma. Deze routines worden gedefinieerd in het headerbestand 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 van gespecificeerde grootte en retourneert de null-pointer die naar de geheugenlocatie wijst.

De geretourneerde 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 datastructuren zoals arrays en structuren. Als deze functie niet voldoende ruimte toewijst zoals gespecificeerd, retourneert het een null-aanwijzer. De volledige vorm van calloc-functie is aaneengesloten toewijzing.

Waarom malloc() gebruiken?

Hier zijn de redenen voor het gebruik van malloc()

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

Waarom calloc() gebruiken?

Hier zijn de redenen om calloc()

. te gebruiken
  • Als je het toegewezen geheugen op nul moet zetten.
  • Je kunt calloc gebruiken die een aanwijzer retourneert om toegang te krijgen tot de geheugenheap.
  • Gebruikt wanneer u de elementen op nul moet initialiseren om een ​​aanwijzer naar het geheugen terug te sturen.
  • Om overflow te voorkomen is dat mogelijk met malloc()
  • Gebruik calloc() om een ​​pagina op te vragen waarvan bekend is dat deze al op nul staat.

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)

Wanneer deze instructie met succes wordt uitgevoerd, wordt een geheugenruimte van 50 bytes gereserveerd. Het adres van de eerste byte gereserveerde ruimte wordt toegewezen aan de aanwijzer "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 aanwijzer, die zich momenteel op de eerste byte van de toegewezen geheugenruimte bevindt, wordt geretourneerd.

Voorbeeld van malloc() in C

In de onderstaande code wordt sizeof(*ptr) gebruikt om een ​​geheugenblok van 15 gehele getallen toe te wijzen. In het printf-statement vinden we de waarde van het zesde gehele getal.

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

Uitvoer:

Waarde van het zesde gehele getal is 480

Voorbeeld van calloc() in C

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

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

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

Uitvoer:

Bouwen en berekenen van de rijsom 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 blok geheugen aan van de grootte die door de gebruiker is opgegeven. De functie Calloc() kan meerdere geheugenblokken toewijzen aan een variabele. De functie Malloc bevat een waarde voor afval. nul. Aantal argumenten is 1. Aantal argumenten is 2. Calloc is langzamer dan malloc. Malloc is sneller dan calloc. Het is niet veilig in vergelijking met calloc. Het is veilig om te gebruiken in vergelijking met malloc. Tijdefficiëntie is hoger dan calloc ().Tijdefficië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 initialisatie uit geheugen. Het voert geheugeninitialisatie uit.

BELANGRIJKE VERSCHILLEN:

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

C Taal

  1. C#-expressies, statements en blokken (met voorbeelden)
  2. C++ do...while-lus met voorbeelden
  3. C++-aanwijzers met voorbeelden
  4. C++ Char-gegevenstype met voorbeelden
  5. Overbelasting van C++-operator met voorbeelden
  6. C++-functies met programmavoorbeelden
  7. C# Collecties Zelfstudie met Voorbeelden
  8. Verschil tussen while en do-while:uitgelegd met voorbeelden
  9. calloc() Functie in C-bibliotheek met programma VOORBEELD
  10. Python String count() met VOORBEELDEN
  11. Python round() functie met VOORBEELDEN