Ajánlott, 2024

Szerkesztő Választása

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

A malloc és a calloc függvény közötti alapvető különbség az, hogy a calloc () két argumentumot igényel egy argumentum helyett, amit a malloc () követel meg. Mind a malloc (), mind a calloc () azok a funkciók, amelyeket a C programozási nyelv biztosítja a dinamikus memóriaelosztást és a futási időkorlátot.

A malloc () és a calloc () függvények megértése előtt először meg kell értenünk a dinamikus memóriaelosztás jelentését. A memória elosztása a számítógép memóriájának a programok és folyamatok végrehajtásához történő hozzárendelése. Dinamikus elosztási technikákat használunk, ha nem ismert, hogy mennyi memória szükséges a programhoz és a folyamathoz.

A dinamikus memóriaelosztás a statikus memóriaelosztással kapcsolatos problémák miatt keletkezik, például ha kevesebb elemet tárolunk, akkor a többi memória feleslegesen pazarolódik. Ezért leküzdi a statikus memóriaelosztás problémáit, ahol a memóriát csak akkor kell kiosztani, ha szükséges.

Összehasonlító táblázat

Az összehasonlítás alapjamalloc ()calloc ()
A blokkok számaAz igényelt memória egyetlen blokkját hozzárendeli.
Több blokkot rendel a kért memóriához.
Szintaxisvoid * malloc (size_t méret);void * calloc (size_t szám, size_t méret);
inicializálásA malloc () nem törli és inicializálja a hozzárendelt memóriát.A hozzárendelt memória nullára inicializálódik a calloc () használatával.
A kiosztás módjaA malloc () függvény a "méret" méretű memóriát osztja fel a kupacról.calloc () függvény osztja a memóriát, amelynek mérete a num * méretnek felel meg.
SebességGyorsÖsszehasonlítóan lassú.

A malloc meghatározása ()

A malloc függvény egy memória blokkot bájtban rendel. A felhasználónak kifejezetten meg kell adnia a blokk méretét, ami a használathoz szükséges.

A malloc függvényprogram segítségével a rendszer RAM-ját kéri a memória felosztására, ha a kérést elismerték (azaz a malloc funkció sikeresen osztja fel a memóriát), akkor egy mutatót ad vissza az első memóriablokkra. Visszaadja az érvénytelen típusú mutatót, vagyis bármilyen típusú mutatót rendelhet.

Bár NULL-t ad vissza, ha a malloc funkciók nem képesek a szükséges mennyiségű memóriát kiosztani. A malloc funkció a TURBO C, a alloc.h vagy a stdlib.h fejléc fájlban alloc.h el, UNIX-on pedig a fejléc fájlban lesz elérhető .

SZINTAXIS

Ennek a funkciónak a szintaxisa a következő:

malloc(number of elements * size of each element);

például,
int *ptr;
ptr=malloc(10*sizeof (int))

Ahol a méret a bájtban szükséges memória méretét jelenti (azaz a hozzárendelendő egymás melletti memóriahelyek számát).

De mint már említettük, a malloc függvény visszavon egy üres mutatót, következésképpen egy leadott operátornak szüksége van arra, hogy szükség esetén módosítsa a visszajuttatott mutatót, a fenti nyilatkozatot a következő formában lehet bemutatni:

ptr_var=(type_cast* ) malloc (size)

Ahol a ptr_var az a mutató neve, amely megtartja a hozzárendelt memóriablokk kiindulási címét, a type_cast az az adattípus, amelybe a visszajuttatott mutatót (vagy típust) kell átalakítani, és a méret leírja az elosztott memóriablokk méretét bájtokban .

Például:
int *ptr;
ptr=(int*) malloc (10 * size of (int));

A malloc funkció által kiosztott memória a szemétértéket tartalmazza .

Megjegyzendő, hogy ellenőrizze, hogy ha a malloc a megfelelő kérelmet generálja-e a rendszer RAM által biztosított memória elosztására, vagy elutasítja (amennyiben nem szükséges a hely). Használhatjuk azt a tulajdonságot, amelyben a szükséges memóriamennyiség nincs hozzárendelve a malloc függvényhez egy NULL értéket ad vissza.

A calloc meghatározása ()

A calloc függvény pontosan ugyanaz, mint a malloc függvény, azzal a különbséggel, hogy két argumentumot igényel, mint a malloc () esetében csak egy érv szükséges.

Például:
int*ptr;
ptr = (int*)calloc(10, 2);

Itt a 2 az adattípus méretét egy bájtban határozza meg, amelyre az elosztást kívánjuk elvégezni, ami ebben az esetben az egész számokra 2. A 10 pedig azt az elemet jelöli, amelyre a kiosztást el kell végezni.

Ne feledje, hogy a malloc függvénynek átadott argumentum (n * 10), egyetlen érv nem keverhető össze, mert több argumentum vesszővel elválasztva. Az argumentum (n * 10) nem tartalmaz vesszőt. Ezért ez egyetlen érv, bár nem egyszerű, hanem kifejezés.

Visszatérve a fenti nyilatkozathoz, a fenti utasítás végrehajtását követően 20 bájtos memóriablokk van hozzárendelve a kérő programhoz, és az első blokk címe hozzárendelésre kerül a kérő programhoz, és az első mondat címe hozzá van rendelve a mutatóhoz ptr.

A calloc funkció által kiosztott memória minden nullát tartalmaz. A calloc függvény a fejléc fájlban is elérhető vagy a TURBO C.

A malloc és a calloc közötti különbségek

A malloc és a calloc funkciók közötti elsődleges különbségek a következők:

  1. A malloc-ban a kívánt memória egyetlen blokkja van, míg a kért memória több blokkját a calloc hozzárendeli.
  2. A malloc funkció nem törli és nem inicializálja a hozzárendelt memóriát. Ez tartalmaz szemétértéket, és az elosztott memória elemét nem lehet megváltoztatni. Ezzel ellentétben a calloc inicializálja a hozzárendelt memóriát nullára.
  3. A malloc gyorsabb, mint a calloc, mivel a calloc-ban további inicializálási lépésekre van szükség, de a különbség elhanyagolható.
  4. A két másik különbség, hogy a calloc egy malloc + memeet, a memset a fizikai oldalakat a memóriában osztja el, míg a malloc a memóriát csak a virtuális címben lévő halomból hozza.

Következtetés:

Mind a malloc, mind a calloc függvényeket a memória elosztására használják, és bizonyos előnyökkel rendelkeznek, és a malloc hátránya gyors, mint a calloc. Sőt, a malloc könnyebben használható, mivel csak egy argumentumot vesz igénybe, mert a calloc memóriát oszt meg és inicializálja a ZERO memóriaterületet. De ha a változó inicializálása sokkal fontosabb az Ön számára, inkább calloc-ot használ.

Top