Înainte de a învăța diferența dintre malloc și calloc, să învățăm
Ce este Alocarea dinamică a memoriei?
Alocarea dinamică a memoriei este un proces de alocare a memoriei în timpul rulării. Există patru rutine de bibliotecă, calloc (), free (), realloc () și malloc () care pot fi folosite pentru a aloca memorie și a o elibera în timpul executării programului. Aceste rutine sunt definite în fișierul antet numit stdlib.h.
Ce este malloc ()?
Este o funcție care este utilizată pentru a aloca dinamic un bloc de memorie. Rezervă spațiu de memorie de dimensiunea specificată și returnează indicatorul nul care indică locația memoriei.
Pointerul returnat este de obicei de tip nul. Înseamnă că putem atribui funcția malloc oricărui pointer. Forma completă de malloc este alocarea memoriei.
În acest tutorial, veți învăța:
- Ce este Alocarea dinamică a memoriei?
- Ce este malloc ()?
- Ce este calloc ()?
- De ce să folosești malloc ()?
- De ce să folosiți calloc ()?
- Sintaxa lui malloc ()
- Sintaxa lui calloc ()
- Exemplu de malloc () în C
- Exemplu de calloc () în C
- Diferența dintre calloc () și malloc ()
Ce este calloc ()?
Funcția Calloc () este utilizată pentru a aloca mai multe blocuri de memorie. Este o funcție de alocare a memoriei dinamice care este utilizată pentru a aloca memoria structurilor de date complexe, cum ar fi matrici și structuri. Dacă această funcție nu reușește să aloce suficient spațiu așa cum este specificat, returnează indicatorul nul Forma completă a funcției calloc este alocarea contiguă.
De ce să folosești malloc ()?
Iată motivele utilizării malloc ()
- Ar trebui să utilizați malloc () atunci când trebuie să alocați memorie în timpul rulării.
- Ar trebui să utilizați malloc atunci când trebuie să alocați obiecte care trebuie să existe dincolo de execuția blocului de memorie curent.
- Mergeți pentru malloc () dacă trebuie să alocați memorie mai mare decât dimensiunea acelei stive.
- Întoarce indicatorul la primul octet de spațiu alocat.
- Permite dezvoltatorilor să aloce memorie, deoarece este necesară în cantitatea exactă.
- Această funcție alocă o dimensiune a blocului de memorie de octeți din heap.
De ce să folosiți calloc ()?
Iată motivele utilizării calloc ()
- Când trebuie să setați memoria alocată la zero.
- Puteți utiliza calloc care returnează un pointer pentru a obține acces la memoria heap.
- Folosit atunci când trebuie să inițializați elementele la zero pentru a returna un pointer în memorie.
- Pentru a preveni revărsarea posibilă cu malloc ()
- Folosiți calloc () pentru a solicita o pagină despre care se știe că este deja zero.
Sintaxa lui malloc ()
Iată o sintaxă a lui malloc ()
ptr = (cast_type *) malloc (byte_size);
În sintaxa de mai sus, ptr este un indicator al cast_type. Funcția malloc returnează un pointer la memoria alocată de byte_size.
Example: ptr = (int *) malloc (50)
Când această instrucțiune este executată cu succes, este rezervat un spațiu de memorie de 50 de octeți. Adresa primului octet de spațiu rezervat este atribuită indicatorului „ptr” de tip int.
Sintaxa lui calloc ()
Iată o sintaxă a lui malloc ()
ptr = (cast_type *) calloc (n, size);
Sintaxa de mai sus este utilizată pentru a aloca n blocuri de memorie de aceeași dimensiune. După ce spațiul de memorie este alocat, toți octeții sunt inițializați la zero. Pointerul, care este în prezent la primul octet al spațiului de memorie alocat, este returnat.
Exemplu de malloc () în C
În codul de mai jos, sizeof (* ptr) este utilizat pentru a aloca un bloc de memorie de 15 numere întregi. În declarația printf, găsim valoarea celui de-al șaselea întreg.
#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));}}
Ieșire:
Valoarea celui de-al șaselea număr întreg este 480
Exemplu de calloc () în C
Programul de limbaj C de mai jos calculează suma primilor zece termeni. Dacă valoarea indicatorului este nulă, atunci spațiul de memorie nu va fi alocat.
Bucla For este utilizată pentru a itera valoarea unei variabile „i” și a imprima suma. În cele din urmă, funcția free este utilizată pentru a elibera indicatorul.
#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;}
Ieșire:
Construirea și calcularea sumei secvenței primilor 10 termeni n Sumă = 45
Diferența dintre calloc () și malloc ()
Mai multe diferențe importante între malloc () și calloc ():
malloc () | calloc () |
Funcția Malloc () va crea un singur bloc de memorie de dimensiunea specificată de utilizator. | Funcția Calloc () poate atribui mai multe blocuri de memorie pentru o variabilă. |
Funcția Malloc conține valoare de gunoi. | Blocul de memorie alocat de o funcție calloc este inițializat la zero. |
Numărul de argumente este 2. | Numărul argumentelor este 1. |
Calloc este mai lent decât malloc. | Malloc este mai rapid decât calloc. |
Nu este sigur, comparativ cu calloc. | Este sigur de utilizat în comparație cu malloc. |
Eficiența timpului este mai mare decât calloc (). | Eficiența timpului este mai mică decât malloc (). |
Funcția Malloc () returnează numai adresa de pornire și nu o face zero. | Înainte de a aloca adresa, funcția Calloc () returnează adresa de pornire și o face zero. |
Nu efectuează inițializări ale memoriei. | Efectuează inițializarea memoriei. |
DIFERENȚE CHEIE:
- funcția malloc () returnează numai adresa de pornire și nu o face zero pe de altă parte, funcția calloc () returnează adresa de pornire și o face zero.
- În funcția malloc, numărul de argumente este 2 în timp ce în funcția calloc, numărul de argumente este 1.
- eficiența timpului malloc () este mai mare decât calloc (), în timp ce malloc () nu este sigur în comparație cu calloc ()
- malloc nu inițializează memoria în timp ce calloc efectuează inițializarea memoriei.