Malloc () vs calloc (): A példákkal magyarázott kulcsfontosságú különbségek

Tartalomjegyzék:

Anonim

Mielőtt megtanulnánk a különbséget a malloc és a calloc között, tanuljuk meg-

Mi a dinamikus memóriaallokáció?

A dinamikus memória-allokáció a memória lefuttatásának folyamata. Négy könyvtári rutin létezik, a calloc (), a free (), a realloc () és a malloc (), amelyek felhasználhatók a memória lefoglalására és felszabadítására 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 olyan funkció, amelyet a memória blokkjának dinamikus lefoglalására használnak. Foglal egy meghatározott méretű memóriaterületet, és visszaadja a memóriahelyre mutató nullmutatót.

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

Ebben az oktatóanyagban megtudhatja:

  • Mi a dinamikus memóriaallokáció?
  • Mi az a malloc ()?
  • Mi az a calloc ()?
  • Miért használja a malloc () -t?
  • Miért érdemes használni a calloc () -t?
  • A malloc szintaxisa ()
  • A calloc () szintaxisa
  • Példa malloc () -ra C-ben
  • A calloc () példája a C-ben
  • Különbség a calloc () és a malloc () között

Mi az a calloc ()?

A Calloc () függvény több memóriablokk lefoglalására szolgál. Ez egy dinamikus memória-allokációs függvény, amelyet a memória lefoglalására használnak összetett adatstruktúrákhoz, például tömbökhöz és struktúrákhoz. Ha ez a függvény nem tud elegendő helyet lefoglalni a megadott módon, akkor az nullát mutat. A calloc függvény teljes formája összefüggő allokáció.

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

Itt vannak a malloc () használatának okai

  • Akkor kell használnia a malloc () parancsot, amikor futás közben kell lefoglalnia a memóriát.
  • Akkor használja a malloc-ot, ha olyan objektumokat kell lefoglalnia, amelyeknek az aktuális memóriablokk végrehajtásán túl is létezniük kell.
  • Látogasson el a malloc () oldalra, ha nagyobb memóriát kell lefoglalnia, mint az a verem.
  • Visszaadja a mutatót a lefoglalt terület első bájtjához.
  • Lehetővé teszi a fejlesztők számára, hogy memóriát osszanak fel, amire szükségük van a pontos mennyiségben.
  • Ez a függvény bájt memóriablokk méretet oszt ki a kupacból.

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

Itt vannak a calloc () használatának okai

  • Amikor nullára kell állítania a lefoglalt memóriát.
  • A memóriahalomba való belépéshez használhatja a calloc-ot, amely mutatót ad vissza.
  • Akkor használatos, amikor nullára kell inicializálnia az elemeket, hogy a mutató visszatérjen a memóriába.
  • A malloc () segítségével lehetséges túlcsordulás megelőzése
  • A calloc () segítségével kérhet egy olyan oldalt, amelyről ismert, hogy már nullázták.

A malloc szintaxisa ()

Itt van a malloc () szintaxisa

ptr = (cast_type *) malloc (byte_size);

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

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

Ennek a utasításnak a sikeres végrehajtása esetén 50 bájt memóriaterület van fenntartva. A fenntartott hely első bájtjának címét az int típusú "ptr" mutatóhoz rendeltük.

A calloc () szintaxisa

Itt van a malloc () szintaxisa

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

A fenti szintaxist n azonos méretű memóriablokk lefoglalására használják. A memóriaterület kiosztása után az összes bájt nullára inicializálódik. Visszaadja a mutatót, amely jelenleg a lefoglalt memóriaterület első bájtjánál található.

Példa malloc () -ra C-ben

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

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

Kimenet:

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

A calloc () példája a C-ben

Az alábbi C nyelvi program kiszámítja az első tíz kifejezés összegét. Ha a mutató értéke null, akkor a memóriaterület nem lesz kiosztva.

A ciklushoz az "i" változó értékének iterálására és az összeg kinyomtatására szolgál. Végül a funkció nélküli a mutató felszabadítására szolgál.

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

Kimenet:

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

Különbség a calloc () és a malloc () között

A herer fontos különbség a malloc () és a calloc () között:

malloc () calloc ()
A Malloc () függvény egyetlen, a felhasználó által megadott méretű blokkot hoz létre. A Calloc () függvény több memóriablokkot rendelhet egy változóhoz.
A Malloc függvény szemetet tartalmaz. A calloc függvény által lefoglalt memória blokkot mindig nullára inicializáljuk.
Az érvek száma 2. Az argumentum száma 1.
A Calloc lassabb, mint a malloc. Malloc gyorsabb, mint a calloc.
Nem biztonságos, mint összehasonlítani a calloc-tal. A mallochoz képest biztonságosan használható.
Az időhatékonyság magasabb, 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 teszi nullává. A cím kiosztása előtt a Calloc () függvény visszaadja a kezdő címet és nullává teszi.
Nem hajtja végre a memória inicializálását. Végzi a memória inicializálását.

Főbb különbségek:

  • A malloc () függvény csak a kezdő címet adja vissza, és nem teszi nullává, 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 2, míg a calloc függvényekben az argumentumok száma 1.
  • 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 elvégzi a memória inicializálását.