Darmowa funkcja w języku c

Darmowa funkcja w języku c

W dynamicznej alokacji przestrzeń pamięci o określonym rozmiarze jest zarezerwowana w czasie wykonywania do wyłącznego użytku przez proces, który go przydziela.

Język C ma kilka funkcji uzupełniających się do dynamicznego zarządzania pamięcią. Najczęściej wdrażane to Malloc (), realLoc () i free (), które są częścią standardowej biblioteki i są zdefiniowane w „stdlib.H ”nagłówek. Te trzy funkcje przydzielają pamięć do procesu, zmieniają jej rozmiar i uwolnij ją ponownie.

W programowaniu bardzo ważne jest, aby ściśle zarządzać pamięcią dynamiczną, ponieważ za każdym razem, gdy przydzielamy zasoby do programu, zabieramy je od systemu operacyjnego. Niewłaściwe zarządzanie dynamiczną pamięcią może mieć katastrofalne konsekwencje dla procesów działających w systemie w tym czasie.

W tym artykule z podpowiedzi Linux dowiesz się, jak korzystać z funkcji Free (), która jest jedną z trzech podstawowych funkcji, które Język C zapewnia dynamiczne zarządzanie pamięcią, która uwalnia przydzielone zasoby i zwraca je do systemu operacyjnego w celu ponownego użycia.

Pokazamy ci składnię i opis tego, jak to działa, argument wejściowy i typ danych, który to wymyśla. Następnie zaimplementujemy użycie funkcji Free () w praktycznych przykładach z fragmentami kodowymi i obrazami, które pokazują jej zastosowanie i jej wpływ na system.

Składnia funkcji Free () w języku C

void Free (void *ptr);

Opis funkcji Free () w języku C

Funkcja Free () uwalnia określoną ilość dynamicznie przydzielonej pamięci.

Pamięć dynamiczna jest przydzielana przez wywołanie funkcji Malloc () i określenie rozmiaru w bajtach obszaru, który chcesz alokować w jego argumencie wejściowym. W rezultacie funkcja ta zwraca wskaźnik „ptr”, który wskazuje na nowo przydzielony obszar.

Funkcja Free () uwalnia przestrzeń pamięci zarezerwowanej, do której odwołuje się „PTR” w swoim pojedynczym argumencie wejściowym i zwraca dostępność do systemu operacyjnego. Ta funkcja nie zwraca żadnych wyników i nie ma definicji błędu w „Errno.H" nagłówek.

Funkcja Free () jest częścią standardowej biblioteki i jest zdefiniowana w „Stdlib.H" nagłówek. Aby go użyć i inne dynamiczne funkcje zarządzania pamięcią, musisz dołączyć ten nagłówek do kodu w następujący sposób:

#włączać

Jak uwolnić dynamicznie przydzieloną pamięć za pomocą funkcji free ()

W tym przykładzie tworzymy bardzo prostą aplikację konsoli, która daje nam kontrolę nad przydzielaniem pamięci funkcji Malloc () i zwolnienie pamięci za pomocą funkcji Free (). Następnie opracowujemy kod i uruchamiamy aplikację, monitorujemy system i obserwujemy efekty.

Aby utworzyć aplikację konsoli, najpierw dołączamy wymagane nagłówki i otwieramy funkcję main () z pustym zwrotem. Oświadczamy w nim wskaźnik „ptr”, który jest używany w funkcjach Malloc () i Free () dla wskazówek do przydzielonych obszarów pamięci. Zadeklarujemy również rozmiar liczb całkowitych, który określa rozmiar przydzielonej pamięci, oraz opcję liczb całkowity.

Po ogłoszeniu wymaganych zmiennych aplikacja wyświetla swoje funkcje PID za pomocą funkcji printf () i getpid (). Następnie program wchodzi do nieskończonej pętli, w której wyświetla menu z dwiema opcjami. Element wybrany przez użytkownika jest pobierany za pomocą funkcji scanf () w opcji liczb całkowitych i jest warunkiem przełącznika z dwoma przypadkami, po jednym dla każdej opcji.

Opcja 1 wywołuje funkcję Malloc (), która przydziela blok pamięci 122 MB do procesu. Podczas gdy opcja 2 uwalnia to blokowanie, wywołując funkcję free (). Możesz zobaczyć pełny kod tej aplikacji na następnej ilustracji:

#włączać
#włączać
#włączać
#włączać
void main ()

opcja int;
char *ptr;
int size = 64000000;
printf ("\ nprocess id: %i \ n", getpid ());
while (1)
printf ("\ n [1] przydzielić pamięć.\ n [2] Pamięć zwolnienia.\N");
Scanf („%i” i opcja);
przełącznik (opcja)
przypadek 1:
printf („\ Nallocating Memory… \ n”);
Ptr = malloc (rozmiar*sizeof (char));
przerwa;
Przypadek 2:
printf („\ nreleasing pamięć… \ n”);
darmowe (ptr);
przerwa;
// Przełącznik końcowy
// kończą while (1)

Zauważ, że w przypadku 1 funkcja Malloc () przydziela obszar pamięci o wielkości i zwraca wskaźnik „ptr”. W przypadku 2 funkcja free () używa tego samego wskaźnika co argument wejściowy, aby uwolnić przydzieloną pamięć.

Aby zobaczyć wpływ tych dwóch funkcji na system, musimy otworzyć dwie konsole poleceń. W terminalu 1 uruchamiamy polecenie górne, aby zobaczyć zasoby używane przez każdy proces systemowy. W terminalu 2 kompilujemy i uruchamiamy aplikację, którą właśnie widzieliśmy.

Po uruchomieniu aplikacji patrzymy na konsolę 1 dla zasobów używanych przez proces, którego PID jest wyświetlany w konsoli 2.

Jak widać na rysunku, system przypisał numer 13009 PID do procesu. W kolumnie 10 lewego terminalu widzimy, że nasza aplikacja zużywa mniej niż 0.1% pamięci systemowej.

Jeśli wybierzemy opcję 1 naszej aplikacji i naciśniemy „Enter”, funkcja Malloc () przydziela 122 MB pamięci do procesu.

Jak widać na tym obrazie, pamięć używana przez naszą aplikację wynosi teraz 3.6% całkowitej pamięci, która jest dostępna w systemie.

Teraz wybieramy opcję 2 naszej aplikacji, która wywołuje funkcję za darmo (), przekazując wskaźnik „ptr” jako argument wejściowy. To działanie uwalnia pamięć przydzieloną przez funkcję Malloc () w opcji 1.

Na tym obrazie możemy zobaczyć, w jaki sposób funkcja Free () uwolniła przydzieloną pamięć z 3.6% do 0.1% całkowitego systemu używanego przez naszą aplikację.

Wniosek

W tym artykule z podpowiedzi Linuksa pokazaliśmy, jak korzystać z funkcji Free (), aby uwolnić dynamicznie przydzieloną pamięć. Przyjrzeliśmy się składni tej funkcji i teoretycznym opisem tego, jak to działa.

Następnie zastosowaliśmy to, czego nauczyliśmy się w praktycznym przykładzie za pomocą fragmentów kodowych i obrazów, w których utworzyliśmy aplikację konsoli, która kontroluje wywołanie funkcji Malloc () i Free (). Prowadziliśmy go krok po kroku i monitorowaliśmy system, aby zobaczyć efekty wywoływania funkcji do alokacji i uwolnienia pamięci systemowej.