Malloc () vs calloc (): Kluczowe różnice wyjaśnione w przykładach

Spisie treści:

Anonim

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

Co to jest dynamiczna alokacja pamięci?

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

Co to jest malloc ()?

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

Zwrócony wskaźnik jest zwykle typu void. Oznacza to, że możemy przypisać funkcję malloc do dowolnego wskaźnika. Pełną formą malloc jest alokacja pamięci.

W tym samouczku dowiesz się:

  • Co to jest dynamiczna alokacja pamięci?
  • Co to jest malloc ()?
  • Co to jest calloc ()?
  • Dlaczego warto używać malloc ()?
  • Dlaczego warto używać metody calloc ()?
  • Składnia malloc ()
  • Składnia calloc ()
  • Przykład malloc () w C
  • Przykład calloc () w C
  • Różnica między calloc () a malloc ()

Co to jest calloc ()?

Funkcja Calloc () służy do przydzielania wielu bloków pamięci. Jest to funkcja dynamicznego przydzielania 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, zwróci wskaźnik null. Pełna forma funkcji calloc to ciągła alokacja.

Dlaczego warto używać malloc ()?

Oto powody używania malloc ()

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

Dlaczego warto używać metody calloc ()?

Oto powody używania metody calloc ()

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

Składnia malloc ()

Oto składnia malloc ()

ptr = (cast_type *) malloc (byte_size);

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

Example: ptr = (int *) malloc (50)

Po pomyślnym wykonaniu tej instrukcji zarezerwowana zostaje przestrzeń 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 ()

ptr = (cast_type *) calloc (n, size);

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 do zera. Zwracany jest wskaźnik, który aktualnie znajduje się na pierwszym bajcie przydzielonej przestrzeni pamięci.

Przykład malloc () w C

W poniższym kodzie sizeof (* ptr) służy do przydzielania bloku pamięci składającego się z 15 liczb całkowitych. W instrukcji printf znajdujemy wartość szóstej liczby całkowitej.

#include#includeint main(){int *ptr;ptr = malloc(15 * sizeof(*ptr));if (ptr != NULL) {*(ptr + 5) = 480;printf("Value of the 6th integer is %d",*(ptr + 5));}}

Wynik:

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 wydrukowania sumy. Wreszcie, funkcja bez funkcji służy do zwalniania wskaźnika.

#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;}

Wynik:

Budowanie i obliczanie sumy sekwencji pierwszych 10 wyrazów n Suma = 45

Różnica między calloc () a 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 inicjalizowany do zera.
Liczba argumentów to 2. Liczba argumentów to 1.
Calloc jest wolniejszy niż malloc. Malloc jest szybszy niż Calloc.
To nie jest bezpieczne w porównaniu do 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 zeruje go. 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 zeruje go, z drugiej strony funkcja calloc () zwraca adres początkowy i ustawia go na zero.
  • W funkcji malloc liczba argumentów wynosi 2, natomiast w funkcji calloc liczba argumentów to 1.
  • efektywność czasowa malloc () jest wyższa niż calloc (), podczas gdy malloc () nie jest bezpieczna w porównaniu do calloc ()
  • malloc nie inicjalizuje pamięci, podczas gdy calloc wykonuje inicjalizację pamięci.