La funzione jemalloc in c

La funzione jemalloc in c
In qualsiasi linguaggio di programmazione, quando stiamo facendo un po 'di codifica su un determinato problema, il programmatore deve ricordare la sua conoscenza di due cose. Uno è la complessità del tempo e un altro è la complessità dello spazio. La complessità dello spazio è la prospettiva più importante della programmazione poiché la memoria del nostro dispositivo non è illimitata. Per eseguire un programma con meno memoria, migliorare la nostra capacità di programmazione.

Ricordando il concetto precedente sulla complessità dello spazio, la funzione JeMalloc () è introdotta nel linguaggio C per aumentare le nostre prestazioni di programmazione.

Perché è stata introdotta la funzione jemalloc ()?

La funzione jemalloc () viene introdotta nella lingua C per migliorare le prestazioni dei programmi del server. Il programmatore controlla qualsiasi programma server per portare il concetto di threading. Più thread eseguono in modo diverso per controllare il programma del server. La funzione jemalloc () aiuta il programma del server a gestire la sua complessità di memoria introducendo la memoria minima durante l'esecuzione di questi thread.

Ora, la funzione jemalloc () ha il suo file di intestazione in lingua C. Fornisce un'opzione migliore per ridurre lo svantaggio della funzione Malloc () o calloc () quando la memoria viene allocata in modo dinamico per i dati o le informazioni in linguaggio C. In precedenza, sono state utilizzate queste funzioni predefinite (malloc (), caloc ()). Ma, poiché queste funzioni hanno alcune limitazioni relative alle prestazioni della memoria, la funzione jemalloc () sarà introdotta in linguaggio c.

Come scaricare e installare il jemalloc?

1. Per scaricare la versione aggiornata di JeMalloc, dobbiamo usare il seguente comando:

$ wget https: // github.com/jemalloc/jemalloc/versioni/download/5.2.0/jemalloc-5.2.0.catrame.BZ2


Dopo aver scaricato il file dal sito precedente, dobbiamo decomprimere il file:

$ tar xjvf jemalloc-5.2.0.catrame.BZ2



2. Successivamente, apriremo la versione scaricata di JeMalloc-5.2.0 file.

$ cd jemalloc-5.2.0/



3. Dopo aver aperto il file, ora configureremo il jemalloc.

$ ./configura--with-jemalloc-prefix = je_


Per configurare il jemalloc significa che vogliamo indicare in quale procedura verrà compilata la funzione jemalloc. Qui, la compilazione verrà eseguita per Malloc nel termine di je_malloc, per Calloc nel termine di je_calloc. Ciò contribuirà a evitare qualsiasi situazione confusa con la funzione di sistema Libc del sistema Malloc.

Di seguito sono riportati i passaggi di configurazione, come forma di istantanee:


Come compilare jemalloc

Per compilare il file jemalloc, dobbiamo installare Fare. Per questo, dobbiamo scrivere a

$ sudo apt install make



Quando diamo la password e premi Invio, la creazione inizierà a installare. I seguenti passaggi del processo di installazione di Make sono riportati nelle seguenti schermate:

I file di biblioteca appena generati

Al termine della configurazione, nella directory Lib vengono installati diversi file di libreria. Sono i seguenti:

    • libjemalloc.UN
    • libjemalloc_pic_a
    • libjemalloc.COSÌ
    • libjemalloc.COSÌ.2


Tra questi file di biblioteca, libjemalloc.a e libjemalloc.COSÌ.2 sono i file di libreria più importanti. Il libjemalloc.Un file rappresenta un file di libreria statico e libjemalloc.COSÌ.2 rappresenta un file di libreria dinamica.

Applicazione della funzione jemalloc ()

Dobbiamo generare le seguenti tre directory:

    1. $ mkdir jemalloctesting
    2. $ mkdir ./ jemalloctesting/ lib
    3. $ mkdir ./ jemalloctesting/ include

Copia dei file di intestazione

Ora copriremo il jemalloc.H, jemalloc_defs.H e libjemalloc.un file all'interno e include lib jemalloc all'interno della libreria jemalloc.

Generazione di file di intestazione

Ora genereremo un file di intestazione chiamato UserDefined_Malloc.H. Quindi, dobbiamo scrivere diversi codici all'interno di questo file di intestazione. I codici sono descritti di seguito:

Esempio di programmazione 1

Creazione di a .C file per eseguire il codice includendo "userdefined_malloc.File di intestazione h ".

#includere
#includere
#include “UserDefined_Malloc.H"
int main ()

// Questo è il puntatore (punto) che manterrà l'indirizzo di base del blocco creato
int* punto;
int n,
J;
// per ottenere i numeri dall'utente
printf ("immettere numeri:");
scanf ("%d", & n);
printf ("I numeri inseriti dall'utente: %d \ n", n);
// allocando la memoria dinamicamente usando malloc ()
punto = (int *) malloc (n * sizeof (int));
// controlla se la memoria allocata da malloc () o no
if (point == null)

printf ("memoria non assegnata.\N");
uscita (0);

altro

// Memoria allocata
printf ("memoria allocata correttamente da malloc () \ n");
// per loop per ottenere elementi dell'array
per (j = 0; j < n; ++j)
punto [j] = j + 1;

// Visualizzazione di tutti gli elementi presenti nell'array
printf ("Gli elementi dell'array sono:");
per (j = 0; j < n; ++j)
printf ("%d", punto [j]);


printf ("\ n");
restituzione 0;

Generare il makefile

$ gedit makefile



CC = GCC
Cflags = -wall -g
Include = -i ./includere/
Alloc_dep =./lib/libjemalloc.UN
Alloc_link = $ (alloc_dep) -lpthread -ldl
Test: test.o
$ (Cc) $ (include) $ (cflags) -o test di test.O $ (alloc_link)
Test.O: test.C $ (alloc_dep)
$ (Cc) -c $ (include) $ (cflags) test.C
pulito:
Test di test RM -f.o


Produzione

$ make
$ ./Test


Spiegazione

Qui, stiamo cercando di eseguire un programma della funzione jemalloc () includendo il file di intestazione denominato “UserDefined_Malloc.H". Ora inseriamo alcuni valori dall'utente e otteniamo la memoria in modo dinamico utilizzando la funzione Malloc (). La funzione Malloc () crea un blocco di memoria e quindi restituisce il suo indirizzo. Per stampare i valori, utilizziamo un ciclo. La funzione jemalloc () esegue correttamente questo programma includendo il file di intestazione nel programma.

Controlla il programma utilizzando lo strumento GDB

$ GDB ./Test




Spiegazione

Per eseguire il debug o vedere passo dopo passo lo stesso programma, possiamo usare “$ GDB ./Test ". Digitiamo semplicemente “$ GDB ./Test " Nel prompt dei comandi ed eseguire questo particolare programma con l'aiuto di comandi GDB come "R", "S", "N", ecc.

Esempio di programmazione 2

Qui, proveremo a fare alcune operazioni sui dati già rimossi dalla funzione Free ().

#includere
#includere
#include "userdefined_malloc.H"
int main ()

int *darray;
int i, n;
printf ("\ n immettere dimensione di array =");
scanf ("%d", & n);
darray = (int *) malloc (n *sizeof (int));
printf ("\ n prima di mettere i contenuti \ n");
per (i = 0; i
printf ("%d \ n", darray [i]);

printf ("\ n Enter %d elements = \ n", n);
per (i = 0; i
scanf ("%d", & darray [i]);

printf ("\ n I contenuti dell'array sono \ n");
per (i = 0; i
printf ("%d \ n", darray [i]);

darray = null;
libero (Darray);
libero (Darray);
printf ("\ n dopo aver liberato la memoria \ n");
per (i = 0; i
printf ("%d \ n", darray [i]);

printf ("\ n");

Compilare ed eseguire il programma

$ make
$ ./Test


Esegui usando GDB

$ GDB ./Test




Spiegazione

In questo particolare esempio di programmazione, creeremo un array dinamicamente con l'aiuto della funzione Malloc () e metteremo alcuni valori dall'utente con l'aiuto di Loop. Quindi, stampiamo quei valori sul monitor. Successivamente, tracceremo la memoria chiamando la funzione Free (). Questa funzione tratta tutta la memoria creata dinamicamente dalla funzione Malloc ().

Dopodiché, se proviamo a stampare di nuovo quei valori, considerando che tutti i valori sono presenti nell'array ed eseguiamo il programma, vedremo alcuni errori come "Guasto di segmentazione (dumped core)". Perché dopo aver liberato la memoria, se faremo di nuovo alcune operazioni su tali valori, non è possibile praticamente poiché la funzione Free () rimuove tutti i dati.

Conclusione

In questo articolo, stiamo cercando di comprendere correttamente la funzione jemalloc (), a partire dal suo download, installazione, creazione di file di intestazione ed esecuzione di un programma. È molto utile usando la funzione jemalloc () per rendere la vita più semplice per altre funzioni, come la funzione malloc (), caloc (), funzione realloc () e free (). La funzione jemalloc () esegue correttamente queste funzioni nel programma.