a malloc és a calloc függvény közötti alapvető különbség az, hogy a calloc () – nak két érvre van szüksége a malloc () által megkövetelt argumentum helyett. Mind a malloc (), mind a calloc () azok a funkciók, amelyeket a C programozási nyelv a dinamikus memóriaelosztást és a de-allokációt biztosítja futási időben.
a malloc() és a calloc() funkciók megértése előtt először értsük meg a dinamikus memória-elosztás jelentését. A memória kiosztása a számítógépes memória hozzárendelésének eljárása a programok és folyamatok végrehajtásához. Dinamikus elosztási technikákat alkalmazunk, amikor korábban nem ismert, hogy mennyi memória szükséges a programhoz és a folyamathoz.
A dinamikus memória-elosztás a statikus memória-elosztással kapcsolatos problémák miatt merül fel, például ha kevesebb elem van tárolva, akkor a memória többi része feleslegesen pazarolódik. Ezért legyőzi a statikus memória-elosztás problémáit, ahol a memóriát csak akkor osztják ki, ha szükséges.
tartalom: malloc() Vs calloc()
- – Összehasonlító Táblázat
- Definíció
- Gombot Különbségek
- Következtetés
Összehasonlító Táblázat
összehasonlítási alapnak | malloc() | calloc() |
---|---|---|
Nem blokkok | Rendel egyetlen blokk követelte, memória. | hozzárendeli a kért memória több blokkját. |
szintaxis | void * malloc (size_t size); | void * calloc (size_t num, size_t size); |
inicializálás | malloc() nem törli és inicializálja a kiosztott memóriát. | A kiosztott memória nullára inicializálódik a calloc () használatával. |
az elosztás módja | malloc() függvény a “méret” méretű memóriát osztja ki a halomból. | a calloc () függvény olyan memóriát oszt ki, amelynek mérete megegyezik a num * méretével. |
sebesség | gyors | viszonylag lassú. |
meghatározása malloc ()
a malloc funkció hozzárendel egy memóriablokkot bájtban. A felhasználónak kifejezetten meg kell adnia a blokk méretét, a használatához szükséges.
keresztül malloc funkció program kéri RAM a rendszer elosztása a memória, ha a kérés elismerték (azaz a malloc funkció azt mondja, sikeres kiosztása memória), visszaad egy mutatót az első blokk memória. Visszaadja void típusú mutató, ez azt jelenti, bármilyen típusú mutató lehet rendelni.
bár null értéket ad vissza, ha a malloc funkciók nem képesek kiosztani a szükséges mennyiségű memóriát. A malloc funkció elérhető a TURBO C , fejléc fájl alloc.h
vagy stdlib.h
, és a UNIX lesz elérhető a fejléc fájl <malloc.h>
.
szintaxis
a függvény 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 méretet jelöli a bájtban szükséges memória(azaz, a kiosztandó szomszédos memória helyek száma).
de amint azt korábban említettük, a malloc függvény érvénytelen mutatót ad vissza, következésképpen a cast operátornak szükség szerint meg kell változtatnia a visszaadott mutató típusát, a fenti nyilatkozat A következő formában jeleníthető meg:
ptr_var=(type_cast* ) malloc (size)
ahol ptr_var
annak a mutatónak a neve, amely megtartja a kiosztott memóriablokk kezdő címét, type_cast
az az adattípus, amelybe a mutatót (vagy Típus érvénytelen) át kell alakítani, és a méret A kiosztott memória méretét írja le memória blokk bájtban.
például:
int *ptr;
ptr=(int*) malloc (10 * size of (int));
a malloc függvény által kiosztott memória szemetet tartalmaz.
vegye figyelembe, hogy annak ellenőrzése érdekében, hogy a megfelelő kérelmet a malloc generálja-e a rendszer RAM által megadott memória elosztására vagy elutasítására (ha szükséges hely nem áll rendelkezésre). Kihasználhatjuk azt a tulajdonságot, amelyben a szükséges mennyiségű memória nincs hozzárendelve, a malloc funkció nullát ad vissza.
A calloc ()
meghatározása a calloc függvény pontosan ugyanúgy működik, mint a malloc függvény, kivéve azt a tényt, hogy két érvet igényel, mint a malloc() esetében, csak egy érvre van szükség.
például:
int*ptr;
ptr = (int*)calloc(10,2);
itt 2 meghatározza az adattípus méretét egy byte-ban, amelyre a kiosztást szeretnénk elvégezni, ami ebben az esetben 2 egész számokra vonatkozik. És 10 jelzi azon elemek számát, amelyekre elosztást kell végezni.
ne feledje, hogy a malloc függvénynek átadott argumentum (n*10) volt, ez egyetlen argumentum, amelyet nem szabad összekeverni, mert több argumentumot mindig vesszővel választanak el. Az argumentum (n*10) között nincs vessző. 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óriablokkot osztanak ki a megkereső programhoz, az első blokk címe pedig a megkereső programhoz van rendelve, az első blokk címe pedig a PTR mutatóhoz van hozzárendelve.
A calloc függvény által kiosztott memória minden nullát tartalmaz. A calloc funkció a <stdlib.h>
vagy <alloc.h>
fejlécfájlban is elérhető.
főbb Különbségek malloc, valamint calloc
Az elsődleges különbséget a malloc, valamint calloc funkciók a következők:
- egyetlen blokk követelte, memória van rendelve a malloc, miközben több blokk kért memória kiosztandó calloc.
- a malloc funkció nem törli és inicializálja a hozzárendelt memóriát. Ez tartalmazza a szemetet érték tétel A kiosztott memória nem lehet megváltoztatni. Ezzel szemben a calloc inicializálja a kiosztott memóriát nullára.
- a malloc gyorsabb, mint a calloc, mivel a calloc-ban az inicializálás további lépései szükségesek, de a különbség elhanyagolható.
- a kettő közötti másik különbség az, hogy a calloc egy malloc+memset, a memset a memóriában lévő fizikai oldalakat osztja ki, míg a malloc csak a virtuális címben lévő halomból rendeli a memóriát.
következtetés
mind a malloc, mind a calloc funkciókat használják a memória elosztására, és bizonyos előnyeik vannak, valamint a hátrány, mint a malloc, gyors, mint a calloc. Sőt, malloc könnyebb használni, mivel csak egy érv, mert calloc osztja memória inicializálása memória terület nulla. De inkább a calloc-ot szeretné használni, ha a változó inicializálás fontosabb az Ön számára.