Różnica między Malloc i RealLOC w programowaniu C

Różnica między Malloc i RealLOC w programowaniu C
Malloc () i realLoc (); Obie funkcje są używane do dynamicznego alokacji pamięci, aw tym zapisie omówimy porównanie obu; realLoc () i Malloc () funkcje szczegółowo. Ale przed zrozumieniem tych funkcji, omówmy różnicę między pamięcią statyczną i dynamiczną w programowaniu C.

W programowaniu C, kiedy uruchamiamy program, zajmuje on pewną pamięć w systemie. Jeśli używamy pamięci statycznej, musimy przypisać stały blok pamięci z systemu, a następnie po wykonaniu programu mogą się zdarzyć dwa scenariusze; Program będzie wymagał większego rozmiaru bloku niż zadeklarowany rozmiar, albo będzie wymagał mniejszego bloku pamięci. Jeśli blok pamięci staje się mniej dla wykonanego programu, wyniki nie będą precyzyjne, a jeśli rozmiar bloku jest większy dla wykonanego programu, pozostała wolna pamięć bloku jest bez użycia.

Aby tego uniknąć, preferowane jest użycie pamięci dynamicznej w programowaniu C, która ma różne typy funkcji.

Co to jest funkcja Malloc () w programowaniu C

W programowaniu C, jeśli używamy pamięci statycznej, nie możemy zmienić rozmiaru pamięci podczas wykonywania programu. Zalecaną praktyką jest stosowanie pamięci dynamicznej w programowaniu C, aby rozmiar pamięci można było zmienić podczas wykonywania programu.

Aby użyć pamięci dynamicznej, musimy dołączyć plik nagłówka „Stdlib.H", który obejmuje wszystkie funkcje pamięci dynamicznej. Malloc () jest również członkiem stdlib.Biblioteka H i służy do przypisywania pamięci do wykonanego programu. Gdy funkcja Malloc () jest wywoływana w programie, wysyła żądanie do sterty systemu, które albo przypisuje żądany blok pamięci do funkcji Malloc () lub zwróci wartość zerową, jeśli nie ma wystarczającej przestrzeni na sterta.

Malloc () żąda bloku pamięci zgodnie z potrzebą wykonanego programu, a gdy program jest pomyślnie wykonywany, możemy zwrócić blok pamięci do sterty za pomocą funkcji Free (), aby można go było używać do wykonania innych instrukcji.

Ogólna składnia funkcji Malloc () to:

ptr_name = (Cast-Type*) Malloc (rozmiar);

Wyjaśnienie powyższej składni jest proste:

  • Możemy użyć dowolnej nazwy wskaźnika (wskaźnik jest używany do przechowywania adresów)
  • Następnie musimy zadeklarować typ danych lub typ rzutu dla wskaźnika jak Int i Char
  • I wreszcie, używając funkcji Malloc () i wewnątrz funkcji, musimy wspomnieć o wielkości potrzebnej pamięci

Aby uzyskać lepsze zrozumienie, rozważymy przykład, utwórz plik o nazwie MAL_TXT.C i wpisz następujący skrypt:

#włączać
#włączać
int main ()
int a = 4, i, *ptr, s = 0;
ptr = (int *) malloc (a * sizeof (int));
if (ptr == null)
printf ("\ nerror! pamięć nie przydzielona.");
wyjście (0);

printf („\ nenter Elements of Array:”);
dla (i = 0; i< a; ++i)
Scanf („%d”, ptr + i);
s + = *(ptr + i);

printf („\ nsum: %d”, s);
printf („\ n”);
powrót 0;

Aby skompilować MAL_TXT.plik C, używamy kompilatora GCC:

$ GCC MAL_TXT.C -O MAL_TXT

Po pomyślnym skompilowaniu pliku bez żadnego błędu, wykonaj kod za pomocą polecenia:

$ ./MAL_TXT

W powyższym kodzie tworzymy tablicę i drukujemy sumę elementów tablicy. Szczegółowe wyjaśnienie powyższego programu to:

  • Uwzględniliśmy dwie biblioteki; stdlib.h do użycia funkcji pamięci dynamicznej i stdio.h dla funkcji wejściowych i wyjściowych
  • Zadeklarowaliśmy cztery zmienne a, s, i i *p, gdzie „ *” jest używany z „p”, ponieważ jest to wskaźnik i przechowuje lokalizację zamiast zmiennych
  • Zastosowaliśmy funkcję Malloc () i wykorzystaliśmy rozmiar zmiennej „A”, co oznacza, że ​​będzie ona żądać pamięci z sterty zgodnie z rozmiarem „A”, a wskaźnik „P” przejdzie na początek pamięci asygnowany
  • Następnie użyliśmy „instrukcji IF”, jeśli sterta nie ma wystarczającej pamięci, zwróci wartość zerową, w tym przypadku po prostu wyświetli „błąd! pamięć nie przydzielona.”Korzystanie z funkcji printf ()
  • Jeśli pamięć zostanie przypisana, to za pomocą funkcji scanf () weźmie cztery elementy od użytkownika, obliczy jej sumę i zapisz ją w „S”
  • Wreszcie wyświetli wartość „S”, która jest sumą wszystkich elementów tablicy

Jaka jest funkcja realLoc () w programowaniu C

Inną funkcją pamięci dynamicznej jest funkcja realLoc (), służy do modyfikacji bloku pamięci przypisanej do funkcji Malloc (). Funkcja Malloc (), jak omówiono powyżej, żąda bloku pamięci z sterty, ale aby zmodyfikować rozmiar bloku pamięci, więc użyliśmy funkcji realLoc () zamiast usuwania całego bloku pamięci i ręczne ponowne ponowne składanie nowego bloku pamięci.

Funkcja realLoc () jest krótką formą „realokacji pamięci” i służy do zmiany rozmiaru rozmiaru bloku pamięci przypisanej przez sterę do funkcji Malloc () lub Calloc (). Nie zakłóca oryginalnej zawartości bloku pamięci i żąda nowego bloku pamięci z sterty i kopiuje wszystkie dane ze starego bloku pamięci do nowego bloku pamięci bez zakłócania żadnej zawartości.

Ogólna składnia korzystania z funkcji realLoc () to:

$ ptr = realLoc (ptr, newSize);

Wyjaśnienie powyższej składni to:

  • Użyj zmiennej wskaźnika używanej z funkcją Malloc ()
  • Użyj funkcji realLoc () z parametrami; Nazwa wskaźnika i nowy rozmiar, który chcesz to przypisać

Ponownie utworzymy plik, real_file.C, i napisz w nim kod, aby lepiej zrozumieć użycie funkcji RealLoc ():

#włączać
#włączać
int main ()
int *ptr;
ptr = Malloc (200);
if (ptr == null)
printf („pamięć nie jest przydzielona.");
wyjście (0);

ptr = realLoc (PTR, 400);
if (ptr!= Null)
printf („Pamięć z powodzeniem przydzielono \ n”);
powrót 0;

Teraz skompiluj real_file.C Korzystanie z kompilatora GCC:

$ gcc real_file.C -O real_file

Jeśli plik jest pomyślnie skompilowany, uruchom program za pomocą polecenia:

$ ./real_file

Wyjaśnienie powyższego skryptu to:

  • Dołączyliśmy dwa pliki nagłówka; stdlib.h dla funkcji pamięci dynamicznej i stdio.h dla funkcji wejściowych i wyjściowych
  • Deklarowana zmienna wskaźnika *ptr
  • Użyłem funkcji Malloc () i poprosił o przypisanie 200 bajtów, jeśli pamięć nie jest przypisana przez stertę: „Pamięć nie jest przydzielona.”Będzie wyświetlany za pomocą funkcji printf ()
  • Jeśli pamięć zostanie przypisana, wejdzie do funkcji realLoc () i rozmiar pamięci od 100 bajtów do 400 bajtów
  • Jeśli sterta przypisała mu 500-bajtowe pamięć; wyświetli („pamięć została pomyślnie utworzona”)

Wniosek

W programowaniu C dynamiczna alokacja pamięci jest ręcznym alokacją pamięci zgodnie z wymogiem programu. Funkcje Malloc () i RealLoc () są częścią pamięci dynamicznej; Malloc () jest używany do alokacji pamięci, a realLoc () jest używany do realokacji pamięci. W tym artykule wyjaśniliśmy oba; funkcje Malloc () i realLoc (), jak działają i jaka jest ogólna składnia korzystania z obu z nich. Wreszcie, dla lepszego zrozumienia, wykonaliśmy przykłady obu funkcji.