malloc() vs calloc(): Kluczowe różnice wyjaśnione za pomocą przykładów

Zanim poznamy różnicę między malloc a calloc, nauczmy się-

Co to jest dynamiczne przydzielanie pamięci?

Dynamiczna alokacja pamięci to proces przydzielania pamięci w czasie wykonywania. Istnieją cztery procedury biblioteczne, calloc(), free(), realloc() i malloc(), których można użyć do alokacji pamięci i zwolnienia jej podczas wykonywania programu. Te procedury są zdefiniowane w pliku nagłówkowym o nazwie stdlib.h.

Co to jest malloc() ?

Jest to funkcja, która służy do dynamicznego przydzielania bloku pamięci. Rezerwuje przestrzeń pamięci o określonym rozmiarze i zwraca pusty wskaźnik wskazujący na lokalizację w pamięci.

Zwracany wskaźnik jest zwykle typu void. Oznacza to, że możemy przypisać funkcję malloc do dowolnego wskaźnika. Pełna forma malloc to alokacja pamięci.

W tym samouczku dowiesz się:

Co to jest calloc() ?

Funkcja Calloc() służy do przydzielania wielu bloków pamięci. Jest to funkcja dynamicznej alokacji pamięci, która służy do przydzielania pamięci do złożonych struktur danych, takich jak tablice i struktury. Jeśli ta funkcja nie przydzieli wystarczającej ilości miejsca, jak określono, zwraca wskaźnik null. Pełna forma funkcji calloc jest alokacją ciągłą.

Dlaczego warto korzystać z malloc() ?

Oto powody używania malloc()

  • Powinieneś używać malloc(), gdy musisz alokować pamięć w czasie wykonywania.
  • Powinieneś używać malloc, gdy musisz alokować obiekty, które muszą istnieć poza wykonaniem bieżącego bloku pamięci.
  • Przejdź do malloc(), jeśli potrzebujesz przydzielić pamięć większą niż rozmiar tego stosu.
  • Zwraca wskaźnik do pierwszego bajtu przydzielonego miejsca.
  • Umożliwia programistom przydzielanie pamięci dokładnie w takiej ilości, jaka jest potrzebna.
  • Ta funkcja przydziela rozmiar bloku pamięci w bajtach ze sterty.

Po co używać calloc() ?

Oto powody używania calloc()

  • Kiedy musisz wyzerować przydzieloną pamięć.
  • Możesz użyć funkcji calloc, która zwraca wskaźnik, aby uzyskać dostęp do sterty pamięci.
  • Używane, gdy trzeba zainicjować elementy na zero, aby zwrócić wskaźnik do pamięci.
  • Aby zapobiec przepełnieniu, które jest możliwe dzięki malloc()
  • Użyj calloc(), aby zażądać strony, o której wiadomo, że jest już wyzerowana.

Składnia malloc()

Oto składnia malloc() |_+_|

W powyższej składni ptr jest wskaźnikiem typu cast_type. Funkcja malloc zwraca wskaźnik do przydzielonej pamięci byte_size. |_+_|

Po pomyślnym wykonaniu tej instrukcji zarezerwowane jest miejsce w pamięci o wielkości 50 bajtów. Adres pierwszego bajtu zarezerwowanej przestrzeni jest przypisany do wskaźnika 'ptr' typu int.

Składnia calloc()

Oto składnia malloc() |_+_|

Powyższa składnia służy do przydzielania n bloków pamięci o tym samym rozmiarze. Po przydzieleniu miejsca w pamięci wszystkie bajty są inicjowane na zero. Zwracany jest wskaźnik, który aktualnie znajduje się na pierwszym bajcie przydzielonego miejsca w pamięci.

Przykład malloc() w C

W poniższym kodzie, sizeof(*ptr) służy do alokacji bloku pamięci zawierającego 15 liczb całkowitych. W instrukcji printf znajdujemy wartość szóstej liczby całkowitej. |_+_|

Wyjście:

Wartość szóstej liczby całkowitej to 480

Przykład calloc() w C

Poniższy program w języku C oblicza sumę pierwszych dziesięciu terminów. Jeśli wartość wskaźnika ma wartość null, to przestrzeń pamięci nie zostanie przydzielona.

Pętla For służy do iteracji wartości zmiennej 'i' i wypisania jej sumy. Wreszcie funkcja free służy do zwalniania wskaźnika. |_+_|

Wyjście:

Budowanie i obliczanie sumy ciągu pierwszych 10 wyrazów n Suma = 45

Różnica między calloc() i malloc()

Oto ważna różnica między malloc() i calloc():

malloc() calloc()
Funkcja Malloc() utworzy pojedynczy blok pamięci o rozmiarze określonym przez użytkownika.Funkcja Calloc() może przypisać wiele bloków pamięci do zmiennej.
Funkcja Malloc zawiera wartość śmieci.Blok pamięci przydzielony przez funkcję calloc jest zawsze inicjowany na zero.
Liczba argumentów to 2.Liczba argumentów to 1.
Calloc jest wolniejszy niż malloc.Malloc jest szybszy niż calloc.
Nie jest bezpieczny w porównaniu z calloc.Jest bezpieczny w użyciu w porównaniu do malloc.
Efektywność czasowa jest wyższa niż calloc().Efektywność czasowa jest niższa niż malloc().
Funkcja Malloc() zwraca tylko adres początkowy i nie zmienia go na zero.Przed przydzieleniem adresu funkcja Calloc() zwraca adres początkowy i ustawia go na zero.
Nie wykonuje inicjalizacji pamięci.Wykonuje inicjalizację pamięci.

KLUCZOWE RÓŻNICE:

  • Funkcja malloc() zwraca tylko adres początkowy i nie zmienia go na zero, natomiast funkcja calloc() zwraca adres początkowy i ustawia go na zero.
  • W funkcji malloc liczba argumentów wynosi 2, podczas gdy w funkcji calloc liczba argumentów wynosi 1.
  • Wydajność czasowa malloc() jest wyższa niż calloc(), podczas gdy malloc() nie jest bezpieczna w porównaniu do calloc()
  • malloc nie inicjuje pamięci, podczas gdy calloc wykonuje inicjalizację pamięci.