În programare, este necesar să stocați date. Datele sunt stocate în memorie. Aceste locații de memorie sunt cunoscute ca variabile. Fiecare variabilă are un tip specific. Acestea pot fi numere întregi, flotoare, duble, caractere etc. Există, de asemenea, structuri de date care pot stoca o colecție secvențială de dimensiuni fixe de elemente de același tip. Este o matrice. Programatorul trebuie să declare dimensiunea matricei. Dacă programatorul declară o serie de numere întregi pentru cinci elemente, nu este posibil să atribuiți o valoare unui index mai mare decât dimensiunea declarată. Alocarea memoriei este fixă și nu poate fi schimbată la timpul de execuție. Metoda de alocare a memoriei este alocarea dinamică a memoriei. Alocarea dinamică a memoriei vă ajută să alocați mai multă memorie când este necesar și eliberați-o când este necesar. Fișierul antet are patru funcții pentru alocarea dinamică a memoriei. calloc și malloc sunt două astfel de funcții. diferența cheie între calloc și malloc este asta calloc alocă memoria și inițializează blocurile de memorie alocate la zero, în timp ce malloc alocă memoria, dar nu inițiază acea memorie alocată la zero. Accesarea conținutului în calloc va da zero, dar malloc va da o valoare de gunoi.
1. Prezentare generală și diferență cheie
2. Ce este calloc
3. Ce este malloc
4. Asemănări între calloc și malloc
5. Comparație de la o parte la alta - calloc vs malloc în formă tabulară
6. rezumat
Alocarea memoriei este procesul de atribuire a memoriei pentru programele de execuție. Uneori este necesar să modificați dimensiunea memoriei. Prin urmare, se utilizează alocarea dinamică a memoriei. Se face folosind indicii. Indicatorii sunt variabilele de referință care dețin adresa unei alte variabile.
Figura 01: calloc și malloc
calloc înseamnă "alocare contiguă". El alocă mai multe blocuri de memorie cu aceeași dimensiune. Sintaxa pentru calloc este după cum urmează. Este nevoie de două argumente. Acestea sunt numărul de blocuri și mărimea fiecărui bloc. Funcția calloc returnează un pointer vid, astfel încât un operator de distribuție este utilizat pentru a întoarce tipul de indicator în funcție de tipul de date cerut.
void * calloc (size_t num, size_t size);
Consultați programul simplu C de mai jos.
#include
#include
int main ()
int ptr * = (int *) calloc (20, sizeof (int));
dacă (ptr == NULL)
printf ("Memoria nu este alocată");
else
printf ("Memoria este alocată");
retur 0;
Conform programului de mai sus, este alocat un bloc de memorie contiguu care poate conține 20 de elemente. Fiecare va avea dimensiunea unui întreg. Dimensiunea (int) este folosită deoarece tipul întregului variază de la compilator la compilator.
Dacă alocarea memoriei este reușită, va reveni la adresa de bază a blocului de memorie. Înseamnă că pointerul ptr indică acum adresa de bază a acelui bloc de memorie. Toate regiunile alocate sunt inițializate la zero. Acesta va imprima mesajul Memorat alocat. Dacă alocarea memoriei este nereușită, aceasta va returna indicatorul nul. Prin urmare, se va imprima mesajul Memorie nu este alocat.
Funcția malloc este utilizată pentru a aloca cantitatea necesară de octeți în memorie. Sintaxa pentru malloc este după cum urmează. Dimensiunea reprezintă memoria necesară în octeți.
void * malloc (dimensiune_t_size);
Funcția malloc returnează un pointer vid, astfel încât un operator de distribuție este folosit pentru a întoarce tipul de indicatorul în funcție de tipul de date cerut.
Consultați programul simplu C de mai jos cu funcția malloc.
#include
#include
int main ()
int ptr * = (int *) malloc (10 * dimensionof (int));
dacă (ptr == NULL)
printf ("Memoria nu este alocată");
else
printf ("Memoria este alocată");
retur 0;
Conform programului de mai sus, va fi alocat un bloc de memorie. Indicatorul indică adresa de pornire a memoriei alocate. Indicatorul returnat este convertit la un tip întreg. Dacă este alocată memoria, va fi imprimată mesajul de memorie. Dacă memoria nu este alocată, se va afișa un indicator nevalid. Prin urmare, memoria nu este alocată mesajului se va imprima.
calloc vs malloc | |
calloc este o funcție pentru alocarea dinamică a memoriei în fișierul header-ului stdlib.h al limbajului C care alocă un anumit număr de octeți și le inițiază la zero. | malloc este o funcție pentru alocarea dinamică a memoriei în fișierul header-ului stdlib.h al limbajului C care alocă un anumit număr de octeți. |
Sens | |
calloc înseamnă alocare contiguă. | malloc înseamnă alocarea memoriei. |
Sintaxă | |
calloc urmează o sintaxă similară cu void * calloc (size_t_num, size_t size); | malloc urmează o sintaxă similară cu void * malloc (size_t_size);. |
Număr de argumente | |
calloc ia două argumente. Ele reprezintă un număr de blocuri și mărimea fiecărui bloc. | malloc ia un argument. Este un număr de octeți. |
Viteză | |
calloc durează mai puțin decât malloc. Aceasta se datorează pasului suplimentar de inițializare a memoriei alocate cu zero. | malloc este mai rapid decât calloc. |
În alocarea de memorie statică, cum ar fi folosirea matricelor, memoria este fixată. Dacă sunt stocate puține elemente, atunci restul memoriei este irosit. De asemenea, ar putea provoca erori atunci când memoria alocată este mică decât memoria necesară. Prin urmare, se utilizează alocarea dinamică a memoriei. În limba C, calloc și malloc oferă alocarea dinamică a memoriei. Diferența dintre calloc și malloc este aceea că calloc alocă memoria și inițializează blocurile de memorie alocate la zero în timp ce malloc alocă memoria, dar nu inițializează blocurile de memorie la zero. Malloc ia două argumente în timp ce calloc ia două argumente.
Puteți descărca versiunea PDF a acestui articol și îl puteți utiliza în scopuri offline conform notei de citare. Descărcați versiunea PDF aici: Diferența dintre calloc și malloc
1.Kumar, Krishan. "Diferența dintre Malloc și Calloc în C." Cs-Fundamentals.com, Cs-Fundamentals.com. Disponibil aici
2. "alocarea dinamică a memoriei C". Wikipedia, Fundația Wikimedia, 13 ianuarie 2018. Disponibil aici
3. "Calloc () versus malloc ()" GeeksforGeeks, 14 iunie 2017. Disponibil aici