A malloc() és a calloc() közötti különbség

Főbb különbségek a malloc() és a calloc() között

  • A malloc() függvény csak a kezdőcímet adja vissza, és nem nullázza ki, másrészt a calloc() függvény visszaadja a kezdőcímet és nullává teszi.
  • A malloc függvényben az argumentumok száma 1, míg a calloc függvényben az argumentumok száma 2.
  • A malloc() időhatékonysága magasabb, mint a calloc(), míg a malloc() nem biztonságos a calloc()-hoz képest
  • A malloc nem inicializálja a memóriát, míg a calloc végrehajtja a memória inicializálását.
malloc() vs calloc()
malloc() vs calloc()

Mi az a dinamikus memóriafoglalás?

Dinamikus memóriafoglalás a memória lefoglalásának folyamata futási időben. Négy könyvtári rutin létezik: calloc(), free(), realloc(), és malloc(), amelyek segítségével memória foglalható le és szabadul fel a program végrehajtása során. Ezeket a rutinokat az stdlib.h nevű fejlécfájl határozza meg.

Mi az a malloc()?

Ez egy memóriablokk dinamikus lefoglalására szolgáló funkció. Meghatározott méretű memóriaterületet foglal le, és visszaadja a memóriahelyre mutató nullmutatót.

A visszaadott mutató általában void típusú. Ez azt jelenti, hogy bármely mutatóhoz hozzárendelhetünk malloc függvényt. A malloc teljes formája a memóriafoglalás.

Mi az a calloc()?

Calloc() függvény több memóriablokk lefoglalására szolgál. Ez egy dinamikus memóriafoglalási funkció, amely a memória komplex adatstruktúrákhoz, például tömbökhöz és struktúrákhoz való hozzárendelésére szolgál. Ha ez a függvény nem tud elegendő helyet lefoglalni a megadottak szerint, nulla mutatót ad vissza. A calloc függvény teljes formája a szomszédos allokáció.

A malloc() és a calloc() közötti különbség

Itt vannak fontos különbségek a malloc () és a calloc () között:

malloc () calloc()
A Malloc() függvény egyetlen, a felhasználó által megadott méretű memóriablokkot hoz létre. A Calloc() függvény több memóriablokkot is hozzárendelhet egy változóhoz.
A Malloc függvény szemetet tartalmaz. A calloc függvény által lefoglalt memóriablokk mindig nullára inicializálódik.
Az argumentumok száma 1. Az argumentumok száma 2.
A Calloc lassabb, mint a malloc. A Malloc gyorsabb, mint a calloc.
A calloc-hoz képest nem biztonságos. A mallochoz képest biztonságos a használata.
Az időhatékonyság nagyobb, mint a calloc(). Az időhatékonyság alacsonyabb, mint a malloc().
A Malloc() függvény csak a kezdőcímet adja vissza, és nem nullázza azt. A cím kiosztása előtt a Calloc() függvény visszaadja a kezdőcímet, és nullává teszi.
Nem végzi el a memória inicializálását. A memória inicializálását végzi.

malloc() szintaxisa

Itt van a malloc() szintaxisa

ptr = (cast_type *) malloc (byte_size);

A fenti szintaxisban a ptr egy cast_type mutató. A malloc függvény egy mutatót ad vissza a byte_size lefoglalt memóriájába.

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

Ha ez az utasítás sikeresen végrehajtódik, 50 bájtos memóriaterület kerül lefoglalásra. A lefoglalt terület első bájtjának címe az int típusú „ptr” mutatóhoz van hozzárendelve.

A calloc() szintaxisa

Itt van a malloc() szintaxisa

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

A fenti szintaxis n azonos méretű memóriablokk lefoglalására szolgál. A memóriaterület lefoglalása után az összes bájt nullára inicializálódik. A mutató, amely jelenleg a lefoglalt memóriaterület első bájtjánál van, visszakerül.

Példa a malloc()-ra C-ben

Az alábbi kódban a sizeof(*ptr) egy 15 egész számból álló memóriablokk lefoglalására szolgál. A printf utasításban megtaláljuk a 6. egész szám értékét.

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

output:

A 6. egész szám értéke 480

Példa a calloc()-ra C-ben

Az alábbi C nyelvű program az első tíz tag összegét számítja ki. Ha a mutató értéke null, akkor a memóriaterület nem kerül lefoglalásra.

A For ciklus egy „i” változó értékének iterálására és az összeg kinyomtatására szolgál. Végül a function free a mutató felszabadítására szolgál.

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

output:

Az első 10 tag sorozatösszegének felépítése és kiszámítása n Sum = 45

Miért használja a malloc()-t?

Íme a malloc() használatának okai

  • Használja a malloc()-ot, ha futás közben memóriát kell lefoglalnia.
  • A malloc-ot akkor kell használnia, ha olyan objektumokat kell lefoglalnia, amelyeknek az aktuális memóriablokk végrehajtásán túl kell létezniük.
  • Ha a verem méreténél nagyobb memóriát kell lefoglalnia, válassza a malloc() parancsot.
  • Visszaadja a mutatót a lefoglalt terület első bájtjára.
  • Lehetővé teszi a fejlesztők számára, hogy a szükséges memóriát a pontos mennyiségben lefoglalják.
  • Ez a funkció egy bájtnyi memóriablokkot foglal le a kupacból.

Miért használjuk a calloc()-t?

Íme a calloc() használatának okai

  • Amikor a lefoglalt memóriát nullára kell állítani.
  • Használhatja a calloc-ot, amely egy mutatót ad vissza, hogy hozzáférjen a memóriakupachoz.
  • Akkor használatos, amikor az elemeket nullára kell inicializálni, hogy a mutatót visszaadja a memóriába.
  • A malloc() által lehetséges túlcsordulás elkerülése érdekében
  • A calloc() segítségével olyan oldalt kérhet, amelyről ismert, hogy már nullázva van.