Podczas programowania konieczne jest przechowywanie danych. Dane są przechowywane w pamięci. Te lokalizacje pamięci są znane jako zmienne. Każda zmienna ma określony typ. Mogą to być liczby całkowite, liczby zmiennoprzecinkowe, liczby podwójne, znaki itp. Istnieją również struktury danych, które mogą przechowywać sekwencyjny zbiór elementów tego samego typu o stałej wielkości. To jest tablica. Programista musi zadeklarować rozmiar tablicy. Jeśli programista deklaruje tablicę liczb całkowitych dla pięciu elementów, nie jest możliwe przypisanie wartości do indeksu większego niż zadeklarowany rozmiar. Alokacja pamięci jest stała i nie można jej zmienić w czasie wykonywania. Inną metodą alokacji pamięci jest dynamiczna alokacja pamięci. Dynamiczny przydział pamięci pomaga przydzielić więcej pamięci w razie potrzeby i zwolnić w razie potrzeby. Plik nagłówkowy ma cztery funkcje do dynamicznego przydzielania pamięci. Calloc i Malloc to dwie takie funkcje. The kluczowa różnica między calloc i malloc jest to calloc przydziela pamięć, a także inicjuje przydzielone bloki pamięci na zero, podczas gdy malloc przydziela pamięć, ale nie inicjuje przydzielonej pamięci na zero. Dostęp do zawartości w calloc da zero, ale malloc da wartość śmieci.
1. Przegląd i kluczowa różnica
2. Co to jest calloc
3. Co to jest malloc
4. Podobieństwa między calloc i malloc
5. Porównanie obok siebie - calloc vs malloc w formie tabelarycznej
6. Podsumowanie
Przydział pamięci to proces przydzielania pamięci dla wykonujących programów. Czasami konieczna jest zmiana wielkości pamięci. Dlatego stosowana jest dynamiczna alokacja pamięci. Odbywa się to za pomocą wskaźników. Wskaźniki są zmiennymi odniesienia, które przechowują adres innej zmiennej.
Ryc. 01: Calloc i Malloc
calloc oznacza „ciągły przydział”. Przydziela wiele bloków pamięci o tym samym rozmiarze. Składnia calloc jest następująca. Wymaga dwóch argumentów. Są liczbą bloków i rozmiarem każdego bloku. Funkcja calloc zwraca pusty wskaźnik, więc operator rzutowania jest używany do zwracania typu wskaźnika zgodnie z wymaganym typem danych.
void * calloc (size_t num, size_t size);
Zobacz poniższy prosty program C..
#zawierać
#zawierać
int main ()
int ptr * = (int *) calloc (20, sizeof (int));
if (ptr == NULL)
printf („Pamięć nie jest przydzielona”);
jeszcze
printf („Pamięć jest przydzielona”);
zwraca 0;
Zgodnie z powyższym programem przydzielony jest ciągły blok pamięci, który może pomieścić 20 elementów. Każdy będzie miał liczbę całkowitą. Sizeof (int) jest używany, ponieważ typ liczb całkowitych różni się w zależności od kompilatora.
Jeśli przydział pamięci zakończy się powodzeniem, zwróci adres bazowy bloku pamięci. Oznacza to, że wskaźnik ptr wskazuje teraz na adres bazowy tego bloku pamięci. Wszystkie przydzielone regiony są inicjowane na zera. Spowoduje to wydrukowanie komunikatu przydzielonego do pamięci. Jeśli przydział pamięci nie powiedzie się, zwróci wskaźnik zerowy. Dlatego wydrukuje komunikat Pamięć nie została przydzielona.
Funkcja malloc służy do przydzielania wymaganej ilości bajtów w pamięci. Składnia malloc jest następująca. Rozmiar reprezentuje wymaganą pamięć w bajtach.
void * malloc (size_t_size);
Funkcja malloc zwraca wskaźnik pustki, więc operator rzutowania jest używany do zwracania typu wskaźnika zgodnie z wymaganym typem danych.
Zobacz poniższy prosty program C z funkcją malloc.
#zawierać
#zawierać
int main ()
int ptr * = (int *) malloc (10 * sizeof (int));
if (ptr == NULL)
printf („Pamięć nie jest przydzielona”);
jeszcze
printf („Pamięć jest przydzielona”);
zwraca 0;
Zgodnie z powyższym programem zostanie przydzielony blok pamięci. Wskaźnik wskazuje na początkowy adres przydzielonej pamięci. Zwrócony wskaźnik jest konwertowany na typ całkowity. Jeśli pamięć jest przydzielona, wydrukuje komunikat o przydzielonej pamięci. Jeśli pamięć nie zostanie przydzielona, zwróci wskaźnik zerowy. Dlatego pamięć nie została przydzielona, wydrukuje się komunikat.
calloc vs malloc | |
calloc to funkcja do dynamicznego przydzielania pamięci w pliku nagłówkowym stdlib.h w języku C, który przydziela określoną liczbę bajtów i inicjuje je do zera. | malloc to funkcja do dynamicznego przydzielania pamięci w pliku nagłówkowym stdlib.h w języku C, który przydziela określoną liczbę bajtów. |
Znaczenie | |
calloc oznacza ciągły przydział. | malloc oznacza przydział pamięci. |
Składnia | |
calloc ma składnię podobną do void * calloc (size_t_num, size_t size); | malloc stosuje składnię podobną do void * malloc (size_t_size);. |
Liczba argumentów | |
calloc przyjmuje dwa argumenty. Są to liczba bloków i rozmiar każdego bloku. | Malloc bierze jeden argument. Jest to liczba bajtów. |
Prędkość | |
calloc trwa niewiele dłużej niż malloc. Wynika to z dodatkowego kroku inicjowania przydzielonej pamięci o zero. | malloc jest szybszy niż calloc. |
W przypadku statycznego przydziału pamięci, np. Przy użyciu tablic, pamięć jest stała. Jeśli przechowywanych jest kilka elementów, reszta pamięci jest marnowana. Może to również powodować błędy, gdy przydzielona pamięć jest mała niż wymagana pamięć. Dlatego stosowana jest dynamiczna alokacja pamięci. W języku C calloc i malloc zapewniają dynamiczny przydział pamięci. Różnica między calloc i malloc polega na tym, że calloc przydziela pamięć, a także inicjuje przydzielone bloki pamięci do zera, podczas gdy malloc przydziela pamięć, ale nie inicjuje bloków pamięci do zera. Malloc przyjmuje dwa argumenty, a calloc dwa argumenty.
Możesz pobrać wersję PDF tego artykułu i używać go do celów offline zgodnie z cytatem. Pobierz wersję PDF tutaj: Różnica między calloc a malloc
1.Kumar, Krishan. „Różnica między Malloc a Calloc w C.” Cs-Fundamentals.com, Cs-Fundamentals.com. Dostępny tutaj
2. „Dynamiczny przydział pamięci C”. Wikipedia, Wikimedia Foundation, 13 stycznia 2018 r. Dostępne tutaj
3. „Calloc () kontra malloc ().” GeeksforGeeks, 14 czerwca 2017 r. Dostępne tutaj