Pirms uzzināt atšķirību starp malloc un calloc, mācīsimies-
Kas ir dinamiskā atmiņas piešķiršana?
Dinamiskā atmiņas piešķiršana ir atmiņas piešķiršanas process izpildes laikā. Ir četras bibliotēkas rutīnas: calloc (), free (), realloc () un malloc (), kuras var izmantot, lai piešķirtu atmiņu un atbrīvotu to programmas izpildes laikā. Šīs rutīnas ir definētas galvenes failā ar nosaukumu stdlib.h.
Kas ir malloc ()?
Tā ir funkcija, ko izmanto, lai dinamiski piešķirtu atmiņas bloku. Tas rezervē noteikta izmēra atmiņas vietu un atgriež nulles rādītāju, kas norāda uz atmiņas vietu.
Atgrieztais rādītājs parasti ir tukšs. Tas nozīmē, ka mēs varam piešķirt malloc funkciju jebkuram rādītājam. Pilna malloka forma ir atmiņas piešķiršana.
Šajā apmācībā jūs uzzināsiet:
- Kas ir dinamiskā atmiņas piešķiršana?
- Kas ir malloc ()?
- Kas ir calloc ()?
- Kāpēc lietot malloc ()?
- Kāpēc izmantot calloc ()?
- Malloka sintakse ()
- Calloc () sintakse
- Malloc () piemērs C
- Calloc () piemērs C
- Atšķirība starp calloc () un malloc ()
Kas ir calloc ()?
Funkcija Calloc () tiek izmantota, lai piešķirtu vairākus atmiņas blokus. Tā ir dinamiska atmiņas piešķiršanas funkcija, ko izmanto, lai piešķirtu atmiņu sarežģītām datu struktūrām, piemēram, masīviem un struktūrām. Ja šī funkcija nespēj piešķirt pietiekami daudz vietas, kā norādīts, tā atgūs nulles rādītāju. Calloc funkcijas pilna forma ir blakus esoša piešķiršana.
Kāpēc lietot malloc ()?
Šeit ir iemesli, kāpēc izmantojat malloc ()
- Jums jāizmanto malloc (), kad izpildes laikā jāpiešķir atmiņa.
- Malloc jāizmanto, kad jāpiešķir objekti, kuriem jābūt ārpus pašreizējā atmiņas bloka izpildes.
- Dodieties uz malloc (), ja jums jāpiešķir atmiņa, kas pārsniedz šīs kaudzes lielumu.
- Tas atgriež rādītāju uz piešķirtās vietas pirmo baitu.
- Tas ļauj izstrādātājiem piešķirt nepieciešamo atmiņu precīzā apjomā.
- Šī funkcija piešķir kaudzes atmiņas bloka lielumu baitus.
Kāpēc izmantot calloc ()?
Šeit ir iemesli, kāpēc izmantojat calloc ()
- Kad piešķirtā atmiņa jāiestata uz nulli.
- Lai piekļūtu atmiņas kaudzei, varat izmantot calloc, kas atgriež rādītāju.
- Izmanto, kad elementi jāinicializē uz nulli, lai atgrieztu rādītāju atmiņā.
- Lai novērstu pārplūdi, kas ir iespējama ar malloc ()
- Izmantojiet calloc (), lai pieprasītu lapu, kas, kā zināms, jau ir nulle.
Malloka sintakse ()
Šeit ir malloka sintakse ()
ptr = (cast_type *) malloc (byte_size);
Iepriekš sintaksē ptr ir cast_type rādītājs. Malloc funkcija atgriež rādītāju atvēlētajā atmiņā byte_size.
Example: ptr = (int *) malloc (50)
Kad šis priekšraksts ir veiksmīgi izpildīts, tiek rezervēta 50 baitu atmiņas vieta. Rezervētās vietas pirmā baita adrese tiek piešķirta int tipa rādītājam "ptr".
Calloc () sintakse
Šeit ir malloka sintakse ()
ptr = (cast_type *) calloc (n, size);
Iepriekšminēto sintaksi izmanto, lai piešķirtu n vienāda lieluma atmiņas blokus. Pēc atmiņas vietas piešķiršanas visi baiti tiek inicializēti līdz nullei. Rādītājs, kas pašlaik atrodas atvēlētās atmiņas vietas pirmajā baitā, tiek atgriezts.
Malloc () piemērs C
Zemāk esošajā kodā sizeof (* ptr) izmanto, lai piešķirtu atmiņas bloku ar 15 veseliem skaitļiem. Paziņojumā printf mēs atrodam 6. veselā skaitļa vērtību.
#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));}}
Izeja:
6. veselā skaitļa vērtība ir 480
Calloc () piemērs C
Zemāk esošā C valodas programma aprēķina pirmo desmit terminu summu. Ja rādītāja vērtība ir null, tad atmiņas vieta netiks piešķirta.
Cilpa tiek izmantota, lai atkārtotu mainīgā "i" vērtību un izdrukātu summu. Visbeidzot, funkcija free tiek izmantota, lai atbrīvotu rādītāju.
#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;}
Izeja:
Pirmo 10 terminu secības summas veidošana un aprēķināšana n Sum = 45
Atšķirība starp calloc () un malloc ()
Herer ir svarīga atšķirība starp malloc () un calloc ():
malloc () | calloc () |
Funkcija Malloc () izveidos vienu lietotāja norādītā lieluma atmiņas bloku. | Izmantojot funkciju Calloc (), mainīgajam var piešķirt vairākus atmiņas blokus. |
Malloc funkcija satur atkritumu vērtību. | Atmiņas bloks, ko piešķir calloc funkcija, vienmēr tiek inicializēts uz nulli. |
Argumentu skaits ir 2. | Argumentu skaits ir 1. |
Calloc ir lēnāks nekā malloc. | Malloc ir ātrāks nekā calloc. |
Tas nav drošs, salīdzinot ar calloc. | Tas ir droši lietojams salīdzinājumā ar malloc. |
Laika efektivitāte ir augstāka nekā calloc (). | Laika efektivitāte ir zemāka nekā malloc (). |
Funkcija Malloc () atgriež tikai sākuma adresi un nepadara to par nulli. | Pirms adreses piešķiršanas funkcija Calloc () atgriež sākuma adresi un padara to par nulli. |
Tas neveic atmiņas inicializēšanu. | Tas veic atmiņas inicializāciju. |
GALVENĀS ATŠĶIRĪBAS:
- funkcija malloc () atgriež tikai sākuma adresi un nepadara to par nulli, no otras puses, funkcija calloc () atgriež sākuma adresi un padara to par nulli.
- Malloc funkcijā argumentu skaits ir 2, bet calloc funkcijās argumentu skaits ir 1.
- malloc () laika efektivitāte ir augstāka nekā calloc (), savukārt malloc () nav droša, salīdzinot ar calloc ()
- malloc neinicializē atmiņu, savukārt calloc veic atmiņas inicializāciju.