Ero malloc() ja calloc() välillä

Keskeiset erot malloc() vs calloc() välillä

  • malloc()-funktio palauttaa vain aloitusosoitteen eikä tee siitä nollaa, toisaalta calloc()-funktio palauttaa aloitusosoitteen ja tekee siitä nollan.
  • Malloc-funktiossa argumenttien määrä on 1, kun taas calloc-funktiossa argumenttien lukumäärä on 2.
  • malloc() aikatehokkuus on korkeampi kuin calloc(), kun taas malloc() ei ole turvallinen verrattuna calloc()
  • malloc ei alusta muistia, kun taas calloc suorittaa muistin alustuksen.
malloc() vs calloc()
malloc() vs calloc()

Mikä on dynaaminen muistin varaus?

Dynaaminen muistin varaus on prosessi muistin varaamiseksi ajon aikana. Kirjastorutiineja on neljä, calloc(), free(), realloc(), ja malloc(), joita voidaan käyttää muistin varaamiseen ja vapauttamiseen ohjelman suorittamisen aikana. Nämä rutiinit määritellään otsikkotiedostossa nimeltä stdlib.h.

Mikä on malloc()?

Se on toiminto, jota käytetään varaamaan muistilohko dynaamisesti. Se varaa määritetyn kokoisen muistitilan ja palauttaa muistipaikkaan osoittavan nollaosoittimen.

Palautettu osoitin on yleensä tyyppiä void. Se tarkoittaa, että voimme määrittää malloc-funktion mille tahansa osoittimelle. Mallocin täysi muoto on muistin allokointi.

Mikä on calloc()?

Calloc()-funktio käytetään varaamaan useita muistilohkoja. Se on dynaaminen muistin varaustoiminto, jota käytetään varaamaan muisti monimutkaisille tietorakenteille, kuten taulukoille ja rakenteille. Jos tämä funktio ei pysty varaamaan tarpeeksi tilaa määritetyllä tavalla, se palauttaa nollaosoittimen. Calloc-funktion täysi muoto on jatkuva allokointi.

Ero malloc() ja calloc() välillä

Tässä on tärkeä ero malloc() vs calloc() välillä:

malloc () calloc()
Malloc()-funktio luo yhden käyttäjän määrittämän kokoisen muistilohkon. Calloc()-funktio voi määrittää useita muistilohkoja muuttujalle.
Malloc-funktio sisältää roskaarvon. Calloc-funktion allokoima muistilohko alustetaan aina nollaan.
Argumenttien lukumäärä on 1. Argumenttien lukumäärä on 2.
Calloc on hitaampi kuin malloc. Malloc on nopeampi kuin calloc.
Se ei ole turvallinen verrattuna callociin. Se on turvallinen käyttää verrattuna mallociin.
Aikatehokkuus on korkeampi kuin calloc(). Aikatehokkuus on alhaisempi kuin malloc().
Malloc()-funktio palauttaa vain aloitusosoitteen eikä tee siitä nollaa. Ennen osoitteen allokointia Calloc()-funktio palauttaa aloitusosoitteen ja nollaa sen.
Se ei suorita muistin alustusta. Se suorittaa muistin alustuksen.

malloc() syntaksi

Tässä on malloc() syntaksi

ptr = (cast_type *) malloc (byte_size);

Yllä olevassa syntaksissa ptr on cast_type -osoitin. Malloc-funktio palauttaa osoittimen varattuun muistiin byte_size.

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

Kun tämä käsky on suoritettu onnistuneesti, varataan 50 tavun muistitilaa. Varatun tilan ensimmäisen tavun osoite on määritetty int-tyypin osoittimelle "ptr".

Calloc() syntaksi

Tässä on malloc() syntaksi

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

Yllä olevaa syntaksia käytetään allokoimaan n samankokoista muistilohkoa. Kun muistitila on varattu, kaikki tavut alustetaan nollaan. Osoitin, joka on tällä hetkellä varatun muistitilan ensimmäisessä tavussa, palautetaan.

Esimerkki malloc():sta C:ssä

Alla olevassa koodissa sizeof(*ptr) käytetään allokoimaan 15 kokonaisluvun muistilohko. Printf-lauseesta löydämme kuudennen kokonaisluvun arvon.

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

lähtö:

Kuudennen kokonaisluvun arvo on 6

Esimerkki calloc():sta C:ssä

Alla oleva C-kielen ohjelma laskee kymmenen ensimmäisen termin summan. Jos osoittimen arvo on null, muistitilaa ei varata.

For-silmukkaa käytetään muuttujan "i" arvon iterointiin ja summan tulostamiseen. Lopuksi Function free -toimintoa käytetään osoittimen vapauttamiseen.

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

lähtö:

Ensimmäisen 10 termin sekvenssisumman rakentaminen ja laskeminen n Sum = 45

Miksi käyttää malloc()-komentoa?

Tässä ovat syyt malloc()

  • Sinun tulee käyttää malloc():ta, kun sinun on varattava muistia ajon aikana.
  • Sinun tulee käyttää mallocia, kun sinun on varattava objekteja, joiden on oltava olemassa nykyisen muistilohkon suorittamisen ulkopuolella.
  • Valitse malloc(), jos sinun on varattava enemmän muistia kuin kyseisen pinon koko.
  • Se palauttaa osoittimen varatun tilan ensimmäiseen tavuun.
  • Sen avulla kehittäjät voivat varata muistia tarpeen mukaan ja tarkasti.
  • Tämä toiminto varaa keosta tavujen muistilohkokoon.

Miksi käyttää calloc()-funktiota?

Tässä ovat syyt calloc()

  • Kun varattu muisti on asetettava nollaan.
  • Voit käyttää callocia, joka palauttaa osoittimen päästäksesi muistikasaan.
  • Käytetään, kun elementit täytyy alustaa nollaan palauttaaksesi osoittimen muistiin.
  • Estääksesi ylivuodon, joka on mahdollista malloc()
  • Käytä calloc()-komentoa pyytääksesi sivua, jonka tiedetään jo olevan nollattu.