La función jemalloc en c

La función jemalloc en c
En cualquier lenguaje de programación, cuando estamos haciendo algo de codificación sobre un determinado problema, el codificador debe recordar su conocimiento sobre dos cosas. Uno es la complejidad del tiempo, y otra es la complejidad espacial. La complejidad del espacio es la perspectiva más importante de la programación ya que la memoria de nuestro dispositivo no es ilimitada. Para ejecutar un programa con menos memoria, mejore nuestra capacidad de programación.

Recordando el concepto anterior sobre la complejidad del espacio, la función jemalloc () se introduce en el lenguaje C para aumentar nuestro rendimiento de programación.

¿Por qué se introdujo la función jemalloc ()??

La función jemalloc () se introduce en el idioma C para mejorar el rendimiento de los programas del servidor. El programador controla cualquier programa de servidor para traer el concepto de subprocesos. Múltiples subprocesos se ejecutan de manera diferente para controlar el programa del servidor. La función jemalloc () ayuda al programa del servidor a administrar su complejidad de la memoria al introducir la memoria mínima al ejecutar estos subprocesos.

Ahora, la función jemalloc () tiene su archivo de encabezado en el idioma C. Da una mejor opción para reducir el inconveniente de la función malloc () o la función calloc () cuando la memoria se asigna dinámicamente para los datos o la información en el lenguaje C. Anteriormente, se usaron estas funciones predefinidas (malloc (), calloc ()). Pero, como estas funciones tienen ciertas limitaciones relacionadas con el rendimiento de la memoria, la función jemalloc () se introducirá en el lenguaje C.

Cómo descargar e instalar el jemalloc?

1. Para descargar la versión actualizada del Jemalloc, tenemos que usar el siguiente comando:

$ wget https: // github.com/jemalloc/jemalloc/comunes/descargar/5.2.0/jemalloc-5.2.0.alquitrán.bz2


Después de descargar el archivo del sitio anterior, tenemos que descomprimir el archivo:

$ tar xjvf jemalloc-5.2.0.alquitrán.bz2



2. A continuación, abriremos la versión descargada del Jemalloc-5.2.0 archivo.

$ CD Jemalloc-5.2.0/



3. Después de abrir el archivo, ahora configuraremos el jemalloc.

ps ./configurar-with-jemalloc-prefix = je_


Para configurar el jemalloc significa que queremos indicar en qué procedimiento se compilará la función jemalloc. Aquí, la compilación se realizará para Malloc en términos de JE_MALLOC, para Calloc en términos de JE_CALLOC. Esto ayudará a evitar situaciones confusas con la función del sistema LIBC del sistema MALLOC MALLOC.

Los pasos de configuración se dan a continuación, como una forma de instantáneas:


Cómo compilar jemalloc

Para compilar el archivo jemalloc, tenemos que instalar hacer. Para esto, tenemos que escribir un

$ sudo apt install make



Cuando damos la contraseña y presionamos Enter, la marca comenzará a instalar. Los siguientes pasos del proceso de instalación de Make se dan en las siguientes capturas de pantalla:

Los archivos de biblioteca recién generados

Después de que se realiza la configuración, se instalan varios archivos de biblioteca en el directorio LIB. Son los siguientes:

    • libjemalloc.a
    • libjemalloc_pic_a
    • libjemalloc.entonces
    • libjemalloc.entonces.2


Entre estos archivos de la biblioteca, libjemalloc.a y libjemalloc.entonces.2 son los archivos de biblioteca más importantes. El libjemalloc.Un archivo representa un archivo de biblioteca estática y libjemalloc.entonces.2 representa un archivo de biblioteca dinámica.

Aplicación de la función jemalloc ()

Tenemos que generar los siguientes tres directorios:

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

Copiar los archivos de encabezado

Ahora, copiaremos el jemalloc.H, jemalloc_defs.H, y libjemalloc.Un archivos en el interior e incluye lib jemalloc dentro de la biblioteca jemalloc.

Generar el archivo de encabezado

Ahora, generaremos un archivo de encabezado llamado UserDefined_Malloc.H. Luego, tenemos que escribir varios códigos dentro de este archivo de encabezado. Los códigos se describen a continuación:

Programación Ejemplo 1

Creando un .El archivo C ejecutar el código incluyendo el "UserDefined_Malloc.H ”Archivo de encabezado.

#incluir
#incluir
#Include “UserDefined_Malloc.H "
int main ()

// Este es el puntero (punto) que contendrá la dirección base del bloque creada
int* punto;
int n,
J;
// para obtener los números del usuario
printf ("Ingrese los números:");
scanf ("%d", & n);
printf ("Los números ingresados ​​por el usuario: %d \ n", n);
// Asignación de la memoria dinámicamente usando malloc ()
punto = (int *) malloc (n * sizeof (int));
// verificar si la memoria asignada por malloc () o no
if (punto == nulo)

printf ("Memoria no asignada.\norte");
salida (0);

demás

// Memoria asignada
printf ("Memoria asignada con éxito por Malloc () \ n");
// para bucle para obtener elementos de la matriz
para (j = 0; j < n; ++j)
punto [j] = j + 1;

// Mostrar todos los elementos presentes en la matriz
printf ("Los elementos de la matriz son:");
para (j = 0; j < n; ++j)
printf ("%d,", punto [j]);


printf ("\ n");
regresar 0;

Generando el makfile

$ GEDIT MAKEFILE



CC = GCC
Cflags = -wall -g
Incluye = -i ./incluir/
Alloc_Dep =./lib/libjemalloc.a
Alloc_link = $ (alloc_dep) -lpThread -ldl
Pruebas: Pruebas.O
$ (CC) $ (incluye) $ (CFLAGS) -O Prueba de prueba.o $ (Alloc_link)
pruebas.O: Prueba.C $ (Alloc_dep)
$ (CC) -C $ (incluye) Prueba de $ (CFLAGS).C
limpio:
Prueba de prueba RM -F.O


Producción

$ make
ps ./pruebas


Explicación

Aquí, estamos tratando de ejecutar un programa de la función jemalloc () al incluir el archivo de encabezado nombrado "UserDefined_Malloc.H ". Ahora, ingresamos algunos valores del usuario y obtenemos la memoria dinámicamente utilizando la función MALLOC (). La función malloc () crea un bloque de memoria y luego devuelve su dirección. Para imprimir los valores, usamos un bucle. La función jemalloc () ejecuta con éxito este programa al incluir el archivo de encabezado en el programa.

Verifique el programa utilizando la herramienta GDB

$ GDB ./pruebas




Explicación

Para depurar o ver paso a paso el mismo programa, podemos usar "$ GDB ./pruebas". Simplemente escribimos "$ GDB ./pruebas" En el símbolo del sistema y ejecute este programa en particular con la ayuda de comandos GDB como "R", "S", "N", etc.

Programación Ejemplo 2

Aquí, intentaremos hacer algunas operaciones en los datos ya eliminados por la función Free ().

#incluir
#incluir
#include "userDefined_malloc.H "
int main ()

int *Darray;
int i, n;
printf ("\ n Ingrese el tamaño de Array =");
scanf ("%d", & n);
darray = (int *) malloc (n *sizeof (int));
printf ("\ n antes de poner contenido \ n");
para (i = 0; i
printf ("%d \ n", darray [i]);

printf ("\ n Enter %d Elements = \ n", n);
para (i = 0; i
scanf ("%d", y Darray [i]);

printf ("\ n el contenido de la matriz es \ n");
para (i = 0; i
printf ("%d \ n", darray [i]);

Darray = nulo;
gratis (Darray);
gratis (Darray);
printf ("\ n después de liberar la memoria \ n");
para (i = 0; i
printf ("%d \ n", darray [i]);

printf ("\ n");

Compilar y ejecutar el programa

$ make
ps ./pruebas


Ejecutar usando GDB

$ GDB ./pruebas




Explicación

En este ejemplo de programación en particular, crearemos una matriz dinámicamente con la ayuda de la función MALLOC () y pondremos algunos valores del usuario con la ayuda de For Loop. Luego, imprimimos esos valores en el monitor. Después, traeremos la memoria llamando a la función Free (). Esta función desinfla toda la memoria creada dinámicamente por la función MALLOC ().

Después de eso, si intentamos imprimir esos valores nuevamente, considerando que todos los valores están presentes en la matriz, y ejecutaremos el programa, veremos algún error como "Falla de segmentación (arrojado núcleo)". Porque después de liberar la memoria, si nuevamente hacemos algunas operaciones sobre esos valores, no es posible prácticamente ya que la función libre () elimina todos los datos.

Conclusión

En este artículo, estamos tratando de comprender la función jemalloc () correctamente, comenzando desde su descarga, instalación, creación de archivos de encabezado y ejecutar un programa. Es muy útil usando la función jemalloc () para facilitar la vida de otras funciones, como la función malloc (), calloc (), la función realLoc () y la función libre (). La función jemalloc () ejecuta con éxito estas funciones en el programa.