Zalecane, 2024

Wybór Redakcji

Różnica między malloc i calloc

Podstawową różnicą między funkcją malloc i calloc jest to, że calloc () potrzebuje dwóch argumentów zamiast jednego argumentu, który jest wymagany przez malloc () . Zarówno malloc () jak i calloc () są funkcjami, które język programowania C zapewnia dynamiczną alokację pamięci i de-alokację w czasie wykonywania.

Przed zrozumieniem funkcji malloc () i funkcji calloc () najpierw musimy zrozumieć znaczenie dynamicznego przydzielania pamięci. Przydzielanie pamięci jest procedurą przypisywania pamięci komputera do wykonywania programów i procesów. Używamy technik dynamicznej alokacji, gdy nie wiadomo, ile miejsca pamięci jest potrzebne dla programu i procesu.

Dynamiczna alokacja pamięci powstaje z powodu problemów związanych z alokacją pamięci statycznej, na przykład gdy mniej elementów jest przechowywanych, a następnie reszta pamięci jest niepotrzebnie marnowana. W związku z tym pokonuje problemy z alokacją pamięci statycznej, gdzie pamięć jest przydzielana tylko wtedy, gdy jest wymagana.

Wykres porównania

Podstawa porównaniamalloc ()calloc ()
Liczba blokówPrzypisuje pojedynczy blok wymaganej pamięci.
Przypisuje wiele bloków żądanej pamięci.
Składniavoid * malloc (size_t size);void * calloc (size_t num, size_t size);
Inicjalizacjamalloc () nie usuwa i inicjuje przydzielonej pamięci.Przydzielona pamięć jest inicjowana do zera za pomocą metody calloc ().
Sposób alokacjiFunkcja malloc () przydziela pamięć o rozmiarze "size" ze sterty.Funkcja calloc () przydziela pamięć, której rozmiar jest równy num * size.
PrędkośćSzybkiStosunkowo wolny.

Definicja malloc ()

Funkcja malloc przypisuje blok pamięci w bajtach . Użytkownik powinien wyraźnie podać rozmiar bloku, który wymaga użycia.

Poprzez program funkcji malloc żąda pamięci RAM systemu do alokacji pamięci, jeśli żądanie zostanie przyznane (tj. Funkcja malloc powiedzie się z powodzeniem w przydzielaniu pamięci), zwróci wskaźnik do pierwszego bloku pamięci. Zwraca on wskaźnik typu void, co oznacza, że ​​można przypisać dowolny typ wskaźnika.

Mimo to zwraca wartość NULL, jeśli funkcje malloc nie są w stanie przydzielić wymaganej ilości pamięci. Funkcja malloc jest dostępna w TURBO C, plik nagłówkowy alloc.h lub stdlib.h, aw systemie UNIX będzie dostępny w pliku nagłówkowym .

SKŁADNIA

Składnia tej funkcji jest następująca:

malloc(number of elements * size of each element);

na przykład,
int *ptr;
ptr=malloc(10*sizeof (int))

Gdzie rozmiar reprezentuje rozmiar pamięci wymaganej w bajtach (tj. Liczbę przyległych lokalizacji pamięci, które mają zostać przydzielone).

Ale jak już wcześniej wspomniano, funkcja malloc zwraca wskaźnik void, w związku z czym operator cast jest wymagany do zmiany zwróconego typu wskaźnika w zależności od potrzeb, powyższa deklaracja może być przedstawiona w następującej formie:

ptr_var=(type_cast* ) malloc (size)

Gdzie ptr_var jest nazwą wskaźnika, który zachowuje adres początkowy przydzielonego bloku pamięci, type_cast jest typem danych, do którego ma zostać transformowany zwracany wskaźnik (lub typ void), a rozmiar opisuje rozmiar przydzielonego bloku pamięci w bajtach .

Na przykład:
int *ptr;
ptr=(int*) malloc (10 * size of (int));

Pamięć przydzielona przez funkcję malloc zawiera wartość śmieci .

Zwróć uwagę, że w celu sprawdzenia, czy odpowiednie żądanie jest generowane przez malloc, aby przydzielić pamięć przyznaną przez systemową pamięć RAM, lub odrzucić (w przypadku, gdy wymagane miejsce nie jest dostępne). Możemy skorzystać z właściwości, w której wymagana ilość pamięci nie jest przypisana, funkcja malloc zwraca NULL.

Definicja calloc ()

Funkcja calloc działa dokładnie tak samo jak funkcja malloc z wyłączeniem faktu, że wymaga dwóch argumentów, jak w przypadku malloc () potrzebny jest tylko jeden argument.

Na przykład:
int*ptr;
ptr = (int*)calloc(10, 2);

Tutaj 2 określa rozmiar typu danych w bajcie, dla którego chcemy dokonać alokacji, co w tym przypadku wynosi 2 dla liczb całkowitych. A 10 oznacza liczbę elementów, dla których należy dokonać alokacji.

Pamiętaj, że argument przekazany do funkcji malloc był (n * 10), jest to pojedynczy argument, którego nie należy mylić, ponieważ wiele argumentów jest zawsze oddzielonych przecinkami. Argument (n * 10) nie zawiera przecinków. Jest to zatem pojedynczy argument, choć nie jest prosty, ale jest wyrażeniem.

Wracając do powyższej deklaracji, po wykonaniu powyższej instrukcji blok pamięci złożony z 20 bajtów jest przydzielany do programu żądającego, a adres pierwszego bloku jest przypisywany do programu żądającego, a adres pierwszego bloku jest przypisywany do wskaźnika ptr.

Pamięć przydzielona przez funkcję calloc zawiera wszystkie zera. Funkcja calloc jest również dostępna w pliku nagłówkowym lub w TURBO C.

Kluczowe różnice między malloc i calloc

Podstawowe różnice między funkcjami malloc i calloc to:

  1. Pojedynczy blok żądanej pamięci jest przydzielany w malloc, podczas gdy wiele bloków żądanej pamięci jest alokowanych przez calloc.
  2. Funkcja malloc nie kasuje i inicjalizuje przydzielonej pamięci. Zawiera wartość śmieci i nie można zmienić pozycji przydzielonej pamięci. Natomiast calloc inicjalizuje przydzieloną pamięć do zera.
  3. malloc jest szybszy od calloc ze względu na wymaganie dodatkowych kroków inicjalizacji w calloc, ale różnica jest znikoma.
  4. Inną różnicą między tymi dwoma jest to, że calloc jest zestawem malloc + memset, memset przydziela fizyczne strony w pamięci, podczas gdy malloc przypisuje tylko pamięć ze sterty w wirtualnym adresie.

Wniosek:

Zarówno funkcje malloc, jak i calloc są używane do alokacji pamięci i mają pewną przewagę, a wada taka jak malloc jest szybka w porównaniu do calloc. Co więcej, malloc jest łatwiejszy w użyciu, ponieważ przyjmuje tylko jeden argument, ponieważ calloc przydziela pamięć i inicjalizuje obszar pamięci za pomocą ZERO. Ale wolisz używać calloc, gdy inicjalizacja zmiennych jest dla ciebie ważniejsza.

Top