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