Die Jemalloc -Funktion in C

Die Jemalloc -Funktion in C
In jeder Programmiersprache muss sich der Kodierer an sein Wissen über zwei Dinge erinnern. Einer ist die Zeitkomplexität und ein anderer ist die Raumkomplexität. Die Raumkomplexität ist die wichtigste Aussicht auf Programmierung, da unser Gerätespeicher nicht unbegrenzt ist. Um ein Programm mit weniger Speicher auszuführen, verbessern Sie unsere Programmierfunktionen.

Erinnern Sie sich an das vorherige Konzept zur Raumkomplexität, die Jemalloc () -Funktion wird in der C -Sprache eingeführt, um unsere Programmierleistung zu steigern.

Warum wurde Jemalloc () -Funktion eingeführt??

Die Jemalloc () -Funktion wird in der C -Sprache eingeführt, um die Leistung der Serverprogramme zu verbessern. Der Programmierer steuert jedes Serverprogramm, um das Konzept des Threading zu bringen. Mehrere Threads werden anders ausgeführt, um das Serverprogramm zu steuern. Die Jemalloc () -Funktion hilft dem Serverprogramm, seine Speicherkomplexität zu verwalten, indem er bei der Ausführung dieser Threads Mindestspeicher einführt.

Jetzt hat die Jemalloc () -Funktion ihre Header -Datei in C -Sprache. Es bietet eine bessere Option, um den Nachteil der Funktion MALOC () oder CALLOC () zu reduzieren, wenn der Speicher dynamisch für die Daten oder Informationen in der C -Sprache zugewiesen wird. Früher wurden diese vordefinierten Funktionen (malloc (), calloc ()) verwendet. Da diese Funktionen jedoch bestimmte Einschränkungen in Bezug auf Speicherleistungen haben, wird die Funktion jemalloc () in der C -Sprache eingeführt.

So herunterladen und installieren Sie den Jemalloc?

1. Um die aktualisierte Version des Jemalloc herunterzuladen, müssen wir den folgenden Befehl verwenden:

$ wget https: // github.com/jemalloc/jemalloc/releases/download/5.2.0/Jemalloc-5.2.0.Teer.BZ2


Nachdem wir die Datei von der vorherigen Site heruntergeladen haben, müssen wir die Datei entpacken:

$ tar xjvf jemalloc-5.2.0.Teer.BZ2



2. Als nächstes öffnen wir die heruntergeladene Version des Jemalloc-5.2.0 Datei.

$ CD Jemalloc-5.2.0/



3. Nach dem Öffnen der Datei konfigurieren wir nun den Jemalloc.

$ ./configure-mit jemalloc-prefix = je_


Um die Jemalloc zu konfigurieren, möchten wir in welcher Prozedur die Jemalloc -Funktion kompiliert werden. Hier erfolgt die Zusammenstellung für Malloc im Laufe des JE_MALLOC für CALLOC im Laufe des JE_CALLOC. Dies wird dazu beitragen, verwirrende Situationen mit der LIBC -Systemfunktion des Systems Malloc des Systems zu vermeiden.

Die Konfigurationsschritte sind unten als Form von Schnappschüssen angegeben:


Wie man Jemalloc kompiliert

Um die Jemalloc -Datei zu kompilieren, müssen wir installieren machen. Dafür müssen wir a schreiben

$ sudo Apt Installation machen



Wenn wir das Passwort geben und die Eingabetaste drücken, wird die Maschine installiert. Die folgenden Schritte des Installationsprozesses von Make sind in den folgenden Screenshots angegeben:

Die neu generierten Bibliotheksdateien

Nach Abschluss der Konfiguration werden mehrere Bibliotheksdateien im LIB -Verzeichnis installiert. Sie sind die folgenden:

    • libjemalloc.A
    • libjemalloc_pic_a
    • libjemalloc.So
    • libjemalloc.So.2


Unter diesen Bibliotheksdateien libjemalloc.A und Libjemalloc.So.2 sind die wichtigsten Bibliotheksdateien. Der Libjemalloc.Eine Datei repräsentiert eine statische Bibliotheksdatei und libjemalloc.So.2 repräsentiert eine dynamische Bibliotheksdatei.

Anwendung der Jemalloc () -Funktion

Wir müssen die folgenden drei Verzeichnisse generieren:

    1. $ mkdir jemalloctesting
    2. $ mkdir ./ Jemaloctesting/ lib
    3. $ mkdir ./ Jemaloctesting/ inklusive

Kopieren der Header -Dateien

Jetzt werden wir den Jemalloc kopieren.H, Jemalloc_defs.H und Libjemalloc.Ein Dateien im Inneren und enthalten Lib Jemalloc in der Jemalloc -Bibliothek.

Header -Datei generieren

Jetzt generieren wir eine Header -Datei mit dem Namen userDefined_malloc.H. Dann müssen wir mehrere Codes in diese Header -Datei schreiben. Die Codes werden unten beschrieben:

Programmierbeispiel 1

Ein ... Erstellen .c Datei zum Ausführen des Code.H ”Header -Datei.

#enthalten
#enthalten
#Include “userDeFined_malloc.H"
int main ()

// Dies ist der Zeiger (Punkt), der die Basisadresse des erstellten Blocks enthält
int* point;
int n,
J;
// um die Nummern vom Benutzer zu erhalten
printf ("Zahlen eingeben:");
scanf ("%d", & n);
printf ("Die vom Benutzer eingegebenen Zahlen: %d \ n", n);
// den Speicher dynamisch mit malloc () zuweisen
point = (int *) malloc (n * sizeof (int));
// Überprüfen Sie, ob der von malloc () zugewiesene Speicher oder nicht
if (Punkt == null)

printf ("Speicher nicht zugeteilt.\N");
exit (0);

anders

// Speicher zugewiesen
printf ("Speicher erfolgreich von malloc () \ n");
// für die Schleife, um Elemente des Arrays zu erhalten
für (j = 0; J < n; ++j)
Punkt [j] = J + 1;

// Alle im Array vorhandenen Elemente anzeigen
printf ("Die Elemente des Arrays sind:");
für (j = 0; J < n; ++j)
printf ("%d", point [j]);


printf ("\ n");
Rückkehr 0;

Erzeugen des Makefile

$ Gedit Makefile



CC = GCC
Cflags = -wall -g
Enthält = -i ./enthalten/
Alloc_dep =./lib/libjemalloc.A
Alloc_link = $ (alloc_dep) -lpThread -ldl
Test, Test.Ö
$ (CC) $ (include) $ (CFLAGS) -O -Test -Tests.o $ (alloc_link)
testen.O: Tests.C $ (alloc_dep)
$ (CC) -C $ (include) $ (CFLAGS) -Tests.C
sauber:
RM -F -Test -Tests.Ö


Ausgang

$ make
$ ./testen


Erläuterung

Hier versuchen wir, ein Programm der Jemalloc () -Funktion auszuführen, indem wir die genannte Header -Datei einbeziehen “UserDefined_malloc.H". Jetzt geben wir einige Werte des Benutzer. Die malloc () -Funktion erstellt einen Speicherblock und gibt dann ihre Adresse zurück. Um die Werte zu drucken, verwenden wir eine Schleife. Die Funktion jemalloc () führt dieses Programm erfolgreich aus, indem die Header -Datei in das Programm aufgenommen wird.

Überprüfen Sie das Programm mit dem GDB -Tool

$ gdb ./testen




Erläuterung

Um das gleiche Programm Schritt für Schritt zu debuggen oder zu sehen, können wir verwenden „$ Gdb ./testen". Wir tippen einfach „$ Gdb ./testen" In der Eingabeaufforderung und Ausführung dieses Programms mit Hilfe von GDB -Befehlen wie „R“, „S“, „N“ usw.

Programmierbeispiel 2

Hier werden wir versuchen, einige Vorgänge für die von der Free () -Funktion bereits entfernten Daten durchzuführen.

#enthalten
#enthalten
#Include "userDefined_malloc.H"
int main ()

int *Darray;
int i, n;
printf ("\ n geben Sie die Größe von Array =");
scanf ("%d", & n);
Darray = (int *) malloc (n *sizeof (int));
printf ("\ n Bevor Inhalte \ n");
für (i = 0; i
printf ("%d \ n", Darray [i]);

printf ("\ n ENGEGEBENDE ELEMENTS = \ N", N);
für (i = 0; i
scanf ("%d", & darray [i]);

printf ("\ n Der Inhalt des Arrays sind \ n");
für (i = 0; i
printf ("%d \ n", Darray [i]);

Darray = null;
kostenlos (Darray);
kostenlos (Darray);
printf ("\ n nach der Befreiung des Speichers \ n");
für (i = 0; i
printf ("%d \ n", Darray [i]);

printf ("\ n");

Kompilieren und führen Sie das Programm aus

$ make
$ ./testen


Mit GDB ausführen

$ gdb ./testen




Erläuterung

In diesem speziellen Programmierbeispiel werden wir mit Hilfe der MALCOC () -Funktion ein Array dynamisch erstellen und einige Werte vom Benutzer mit Hilfe von für die Schleife abgeben. Dann drucken wir diese Werte auf dem Monitor. Danach werden wir den Speicher bearbeiten, indem wir die Funktion free () aufrufen. Diese Funktion bearbeitet den gesamten Speicher, der dynamisch von der MALM () -Funktion erstellt wurde.

Wenn wir danach versuchen, diese Werte erneut zu drucken, werden alle Werte im Array vorhanden sein und das Programm ausführen "Segmentierungsfehler (Core Dumped)". Denn nach der Befreiung des Speichers ist es praktisch nicht möglich, wenn wir wieder einige Vorgänge für diese Werte ausführen, wenn die Free () -Funktion alle Daten beseitigt.

Abschluss

In diesem Artikel versuchen wir, die Jemalloc () -Funktion ordnungsgemäß zu verstehen, beginnend mit dem Download, Installation, Erstellen von Header -Datei und Ausführen eines Programms. Es ist sehr nützlich, wenn Sie die Funktion jemalloc () haben, um anderen Funktionen wie malloc (), CALLOC () -Funktion, Realloc () -Funktion und Free () -Funktion das Leben zu erleichtern. Die Funktion jemalloc () führt diese Funktionen erfolgreich im Programm aus.