Funkcja Jemalloc w C

Funkcja Jemalloc w C
W każdym języku programowania, kiedy wykonujemy kodowanie określonego problemu, koder musi pamiętać o swojej wiedzy o dwóch rzeczach. Jednym jest złożoność czasu, a druga jest złożonością przestrzeni. Złożoność przestrzeni jest najważniejszą perspektywą programowania, ponieważ nasza pamięć urządzenia nie jest nieograniczona. Aby wykonać program o mniejszej pamięci, zwiększyć naszą zdolność programowania.

Pamiętając o poprzedniej koncepcji złożoności przestrzeni, funkcja JEMALLOC () jest wprowadzana w języku C, aby zwiększyć naszą wydajność programowania.

Dlaczego wprowadzono funkcję JEMALLOC ()?

Funkcja JEMALLOC () jest wprowadzana w języku C w celu poprawy wydajności programów serwerowych. Programator kontroluje dowolny program serwerowy, aby wprowadzić koncepcję wątków. Wiele wątków wykonuje się w inny sposób, aby kontrolować program serwera. Funkcja JEMALLOC () pomaga programowi serwerowi zarządzać złożonością pamięci, wprowadzając minimalną pamięć podczas wykonywania tych wątków.

Teraz funkcja JEMALLOC () ma swój plik nagłówka w języku C. Daje lepszą opcję zmniejszenia wady funkcji Malloc () lub calloc (), gdy pamięć jest dynamicznie przydzielana dla danych lub informacji w języku c. Wcześniej zastosowano te predefiniowane funkcje (Malloc (), calloc ()). Ale ponieważ funkcje te mają pewne ograniczenia związane z wydajnością pamięci, funkcja JEMALLOC () zostanie wprowadzona w języku C.

Jak pobrać i zainstalować JEMALLOC?

1. Aby pobrać zaktualizowaną wersję JEMALLOC, musimy użyć następującego polecenia:

$ wget https: // github.com/jemalloc/jemalloc/remises/pobierz/5.2.0/JEMALLOC-5.2.0.smoła.BZ2


Po pobraniu pliku z poprzedniej witryny musimy rozpakować plik:

$ tar xjvf Jemalloc-5.2.0.smoła.BZ2



2. Następnie otworzymy pobraną wersję JEMALLOC-5.2.0 plik.

$ CD JEMALLOC-5.2.0/



3. Po otwarciu pliku skonfigurujemy teraz JEMALLOC.

$ ./konfiguruj--with-Jemalloc-prefix = je_


Aby skonfigurować JEMALLOC oznacza, że ​​chcemy wskazać, jaką procedurę zostanie skompilowana. Tutaj kompilacja zostanie wykonana dla Malloc w terminach Je_Malloc, dla Calloc w terminie JE_CALLOC. Pomoże to uniknąć mylących sytuacji z funkcją systemu systemu Malloc systemu LIBC.

Kroki konfiguracji podano poniżej, jako forma migawek:


Jak skompilować Jemalloc

Aby skompilować plik JEMALLOC, musimy zainstalować robić. W tym celu musimy napisać

$ sudo apt instal Make



Po podaniu hasła i naciśnięcia ENTER MAK zacznie się instalować. Poniższe kroki procesu instalacji wykonania podano na poniższych zrzutach ekranu:

Nowo wygenerowane pliki biblioteczne

Po zakończeniu konfiguracji kilka plików bibliotecznych jest zainstalowane w katalogu Lib. Są następujące:

    • libjemalloc.A
    • libjemalloc_pic_a
    • libjemalloc.Więc
    • libjemalloc.Więc.2


Wśród tych plików bibliotecznych libjemalloc.a i libjemalloc.Więc.2 to najważniejsze pliki biblioteczne. Libjemalloc.plik reprezentuje statyczny plik biblioteki i libjemalloc.Więc.2 reprezentuje dynamiczny plik biblioteki.

Zastosowanie funkcji JEMALLOC ()

Musimy wygenerować następujące trzy katalogi:

    1. $ mkdir Jemalloctesting
    2. $ mkdir ./ JEMALLOCTESTING/ lib
    3. $ mkdir ./ JEMALLOCTESTING/ to

Kopiowanie plików nagłówka

Teraz skopiujemy Jemalloc.H, JEMALLOC_DEFS.H i libjemalloc.pliki w środku i zawierają lib Jemalloc do biblioteki Jemalloc.

Generowanie pliku nagłówka

Teraz wygenerujemy plik nagłówka o nazwie userDefined_Malloc.H. Następnie musimy napisać kilka kodów w tym pliku nagłówka. Kody opisano poniżej:

Przykład programowania 1

Tworząc .plik C do uruchomienia kodu, włączając „userDefined_Malloc.H ”plik nagłówka.

#włączać
#włączać
#include „userDefined_Malloc.H"
int main ()

// To jest wskaźnik (punkt), który pomieści adres podstawowy utworzonego bloku
int* punkt;
int n,
J;
// Aby uzyskać liczby od użytkownika
printf („Wprowadź numery:”);
Scanf („%d”, & n);
printf („liczby wprowadzone przez użytkownika: %d \ n”, n);
// dynamicznie przydzielić pamięć za pomocą Malloc ()
Point = (int *) malloc (n * sizeof (int));
// sprawdzanie, czy pamięć przydzielona przez Malloc (), czy nie
if (Point == null)

printf („pamięć nie przydzielona.\N");
wyjście (0);

w przeciwnym razie

// Przydzielona pamięć
printf („pamięć przydzielona pomyślnie przez Malloc () \ n”);
// dla pętli, aby uzyskać elementy tablicy
dla (j = 0; j < n; ++j)
punkt [j] = j + 1;

// Wyświetlanie wszystkich elementów obecnych w tablicy
printf („Elementy tablicy to:”);
dla (j = 0; j < n; ++j)
printf („%d”, Point [j]);


printf („\ n”);
powrót 0;

Generowanie makefile

$ gedit Makefile



CC = GCC
Cflags = -WALL -G
Obejmuje = -i ./włączać/
AlloC_DEP =./lib/libjemalloc.A
AlroC_Link = $ (alloc_dep) -lpthread -Ldl
Testowanie: testowanie.o
$ (Cc) $ (obejmuje) $ (cflags) -o testowanie testowe.o $ (alloC_Link)
Testowanie.O: Testowanie.C $ (alloc_dep)
$ (Cc) -C $ (obejmuje) testowanie $ (cflags).C
czysty:
Testowanie testów RM -F.o


Wyjście

$ MAK
$ ./testowanie


Wyjaśnienie

Tutaj staramy się uruchomić program funkcji JEMALLOC (), włączając nazwany plik nagłówka „UserDefined_Malloc.H". Teraz wprowadzamy niektóre wartości od użytkownika i dynamicznie otrzymujemy pamięć za pomocą funkcji Malloc (). Funkcja Malloc () tworzy blok pamięci, a następnie zwraca swój adres. Aby wydrukować wartości, używamy pętli. Funkcja JEMALLOC () z powodzeniem wykonuje ten program, włączając plik nagłówka w programie.

Sprawdź program za pomocą narzędzia GDB

$ gdb ./testowanie




Wyjaśnienie

Aby debugować lub zobaczyć krok po kroku ten sam program, możemy użyć „$ GDB ./testowanie ”. Po prostu pisamy „$ GDB ./testowanie ” W wierszu polecenia i uruchom ten konkretny program za pomocą poleceń GDB, takich jak „R”, „S”, „N” itp.

Przykład programowania 2

Tutaj postaramy się przeprowadzić operacje danych już usunięte przez funkcję Free ().

#włączać
#włączać
#Include "userDefined_Malloc.H"
int main ()

int *darray;
int i, n;
printf („\ n Wprowadź rozmiar array =”);
Scanf („%d”, & n);
darray = (int *) malloc (n *sizeof (int));
printf („\ n przed umieszczeniem treści \ n”);
dla (i = 0; i
printf („%d \ n”, darray [i]);

printf („\ n Enter %d Elements = \ n”, n);
dla (i = 0; i
Scanf („%d” i darray [i]);

printf („\ n zawartość tablicy to \ n”);
dla (i = 0; i
printf („%d \ n”, darray [i]);

darray = null;
darmowy (darray);
darmowy (darray);
printf („\ n po zwolnieniu pamięci \ n”);
dla (i = 0; i
printf („%d \ n”, darray [i]);

printf („\ n”);

Skompiluj i uruchom program

$ MAK
$ ./testowanie


Uruchom za pomocą GDB

$ gdb ./testowanie




Wyjaśnienie

W tym konkretnym przykładzie programowania utworzymy tablicę dynamicznie za pomocą funkcji Malloc () i umieścimy niektóre wartości od użytkownika za pomocą pętli. Następnie drukujemy te wartości na monitorze. Następnie przekazamy pamięć, wywołując funkcję Free (). Ta funkcja rozlega się całą pamięcią utworzoną dynamicznie przez funkcję Malloc ().

Następnie, jeśli spróbujemy ponownie wydrukować te wartości, biorąc pod uwagę, że wszystkie wartości są obecne w tablicy i uruchomić program, zobaczymy jakiś błąd „Wadę segmentacji (zrzucona rdzeń)”. Ponieważ po zwolnieniu pamięci, jeśli ponownie przeprowadzimy niektóre operacje tych wartości, nie jest to możliwe praktycznie, ponieważ funkcja free () usuwa wszystkie dane.

Wniosek

W tym artykule staramy się poprawnie zrozumieć funkcję JEMALLOC (), zaczynając od pobierania, instalacji, tworzenia pliku nagłówka i uruchamiania programu. Jest to bardzo przydatne przy użyciu funkcji JEMALLOC (), aby ułatwić życie innym funkcjom, takim jak Malloc (), calloc () funkcja, realLoc () funkcja i funkcja free (). Funkcja JEMALLOC () z powodzeniem wykonuje te funkcje w programie.