Razlika između malloc() i calloc()
Ključne razlike između malloc() i calloc()
- funkcija malloc() vraća samo početnu adresu i ne čini je nulom, s druge strane, funkcija calloc() vraća početnu adresu i čini je nulom.
- U funkciji malloc broj argumenata je 1, dok je u funkciji calloc broj argumenata 2.
- vremenska učinkovitost malloc() veća je od calloc(), dok malloc() nije siguran u usporedbi s calloc()
- malloc ne inicijalizira memoriju, dok calloc izvodi inicijalizaciju memorije.

Što je dinamička dodjela memorije?
Dinamično raspoređivanje memorije je proces dodjele memorije tijekom izvođenja. Postoje četiri knjižnične rutine, calloc(), free(), realloc()i malloc() koji se može koristiti za dodjelu memorije i njeno oslobađanje tijekom izvođenja programa. Te su rutine definirane u datoteci zaglavlja koja se zove stdlib.h.
Što je malloc()?
To je funkcija koja se koristi za dinamičku dodjelu bloka memorije. Rezervira memorijski prostor određene veličine i vraća nulti pokazivač koji pokazuje na memorijsku lokaciju.
Vraćeni pokazivač obično je tipa void. To znači da bilo kojem pokazivaču možemo dodijeliti funkciju malloc. Puni oblik malloc-a je dodjela memorije.
Što je calloc()?
Funkcija Calloc(). koristi se za dodjelu više blokova memorije. To je funkcija dinamičke dodjele memorije koja se koristi za dodjelu memorije složenim podatkovnim strukturama kao što su nizovi i strukture. Ako ova funkcija ne uspije dodijeliti dovoljno prostora kako je navedeno, vraća nulti pokazivač. Puni oblik calloc funkcije je kontinuirana dodjela.
Razlika između malloc() i calloc()
Ovdje su važne razlike između malloc() i calloc():
malloc () | calloc() |
---|---|
Funkcija Malloc() će stvoriti jedan blok memorije veličine koju odredi korisnik. | Funkcija Calloc() može dodijeliti više blokova memorije za varijablu. |
Funkcija Malloc sadrži vrijednost smeća. | Memorijski blok koji dodjeljuje calloc funkcija uvijek se inicijalizira na nulu. |
Broj argumenata je 1. | Broj argumenata je 2. |
Calloc je sporiji od malloc-a. | Malloc je brži od calloca. |
Nije siguran u usporedbi s callocom. | Siguran je za korištenje u usporedbi s mallocom. |
Vremenska učinkovitost je veća od calloc(). | Vremenska učinkovitost niža je od malloc(). |
Funkcija Malloc() vraća samo početnu adresu i ne čini je nulom. | Prije dodjele adrese, funkcija Calloc() vraća početnu adresu i postavlja je na nulu. |
Ne izvodi inicijalizaciju memorije. | Izvodi inicijalizaciju memorije. |
Sintaksa malloc()
Evo sintakse malloc()
ptr = (cast_type *) malloc (byte_size);
U gornjoj sintaksi, ptr je pokazivač na cast_type. Funkcija malloc vraća pokazivač na dodijeljenu memoriju byte_size.
Example: ptr = (int *) malloc (50)
Kada se ova izjava uspješno izvrši, rezervira se memorijski prostor od 50 bajtova. Adresa prvog bajta rezerviranog prostora dodjeljuje se pokazivaču "ptr" tipa int.
Sintaksa calloc()
Evo sintakse malloc()
ptr = (cast_type *) calloc (n, size);
Gornja sintaksa koristi se za dodjelu n memorijskih blokova iste veličine. Nakon što je memorijski prostor dodijeljen, svi bajtovi se inicijaliziraju na nulu. Vraća se pokazivač koji je trenutno na prvom bajtu dodijeljenog memorijskog prostora.
Primjer malloc() u C-u
U donjem kodu, sizeof(*ptr) se koristi za dodjelu memorijskog bloka od 15 cijelih brojeva. U naredbi printf nalazimo vrijednost šestog cijelog broja.
#include<stdlib.h> #include<stdio.h> 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)); } }
Izlaz:
Vrijednost šestog cijelog broja je 6
Primjer calloc() u C-u
Program za jezik C u nastavku izračunava zbroj prvih deset članova. Ako je vrijednost pokazivača null, tada se memorijski prostor neće dodijeliti.
For petlja se koristi za ponavljanje vrijednosti varijable "i" i ispis zbroja. Na kraju, funkcija free koristi se za oslobađanje pokazivača.
#include <stdio.h> #include <stdlib.h> 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; }
Izlaz:
Izgradnja i izračunavanje zbroja niza prvih 10 članova n Zbroj = 45
Zašto koristiti malloc()?
Ovo su razlozi korištenja malloc()
- Trebali biste koristiti malloc() kada morate dodijeliti memoriju tijekom izvođenja.
- Trebali biste koristiti malloc kada morate dodijeliti objekte koji moraju postojati nakon izvršenja trenutnog memorijskog bloka.
- Odaberite malloc() ako trebate dodijeliti memoriju veću od veličine tog stoga.
- Vraća pokazivač na prvi bajt dodijeljenog prostora.
- Omogućuje programerima da dodijele memoriju prema potrebi u točnom iznosu.
- Ova funkcija dodjeljuje veličinu memorijskog bloka od bajtova iz hrpe.
Zašto koristiti calloc()?
Ovo su razlozi korištenja calloc()
- Kada morate postaviti dodijeljenu memoriju na nulu.
- Možete koristiti calloc koji vraća pokazivač da biste dobili pristup hrpi memorije.
- Koristi se kada trebate inicijalizirati elemente na nulu da biste vratili pokazivač u memoriju.
- Da biste spriječili prelijevanje koje je moguće s malloc()
- Upotrijebite calloc() da zatražite stranicu za koju se zna da je već postavljena na nulu.