Jemalloc -funksjonen i C

Jemalloc -funksjonen i C
På ethvert programmeringsspråk, når vi gjør noe koding på et visst problem, må koderen huske kunnskapen hans om to ting. Den ene er tidskompleksiteten, og en annen er romkompleksiteten. Romkompleksitet er det viktigste utsiktene til programmering siden enhetsminnet ikke er ubegrenset. For å utføre et program med mindre minne, forbedre vår programmeringsevne.

Husker det forrige konseptet om romkompleksitet, blir Jemalloc () -funksjonen introdusert på C -språket for å øke vår programmeringsytelse.

Hvorfor ble Jemalloc () funksjon introdusert?

Jemalloc () -funksjonen introduseres på C -språket for å forbedre ytelsen til serverprogrammene. Programmereren kontrollerer ethvert serverprogram for å bringe begrepet gjenging. Flere tråder kjøres på en annen måte for å kontrollere serverprogrammet. Jemalloc () -funksjonen hjelper serverprogrammet med å administrere minnekompleksiteten ved å innføre minimumsminne når du utfører disse trådene.

Nå har Jemalloc () -funksjonen sin overskriftsfil på C -språket. Det gir et bedre alternativ å redusere ulempen med Malloc () -funksjonen eller Calloc () -funksjonen når minnet blir tildelt dynamisk for data eller informasjon på C -språket. Tidligere ble disse forhåndsdefinerte funksjonene (malloc (), calloc ()) brukt. Men ettersom disse funksjonene har visse begrensninger relatert til minneprestasjoner, vil Jemalloc () -funksjonen bli introdusert på C -språk.

Hvordan laste ned og installere Jemalloc?

1. For å laste ned den oppdaterte versjonen av Jemalloc, må vi bruke følgende kommando:

$ wget https: // github.com/jemalloc/jemalloc/utgivelser/nedlasting/5.2.0/Jemalloc-5.2.0.tjære.BZ2


Etter å ha lastet ned filen fra det forrige nettstedet, må vi pakke ut filen:

$ tar xjvf jemalloc-5.2.0.tjære.BZ2



2. Deretter åpner vi den nedlastede versjonen av Jemalloc-5.2.0 fil.

$ CD Jemalloc-5.2.0/



3. Etter å ha åpnet filen, vil vi nå konfigurere Jemalloc.

$ ./konfigurere-med-Jemalloc-prefix = je_


For å konfigurere Jemalloc betyr at vi ønsker å indikere i hvilken prosedyre Jemalloc -funksjonen vil bli samlet. Her vil samlingen bli gjort for Malloc i løpet av JE_Malloc, for Calloc i løpet av JE_CALLOC. Dette vil bidra til å unngå forvirrende situasjoner med systemets LIBC -systemfunksjon Malloc.

Konfigurasjonstrinnene er gitt nedenfor, som en form for øyeblikksbilder:


Hvordan kompilere Jemalloc

For å kompilere Jemalloc -filen, må vi installere gjøre. For dette må vi skrive en

$ sudo apt install Make



Når vi gir passordet og trykker på enter, vil merkevaren begynne å installere. Følgende trinn i installasjonsprosessen for å lage er gitt i følgende skjermbilder:

De nylig genererte bibliotekfilene

Etter at konfigurasjonen er gjort, er flere bibliotekfiler installert i LIB -katalogen. De er følgende:

    • Libjemalloc.en
    • libjemalloc_pic_a
    • Libjemalloc.så
    • Libjemalloc.så.2


Blant disse bibliotekfilene, Libjemalloc.A og Libjemalloc.så.2 er de viktigste bibliotekfilene. Libjemalloc.En fil representerer en statisk bibliotekfil og libjemalloc.så.2 representerer en dynamisk bibliotekfil.

Bruk av Jemalloc () -funksjonen

Vi må generere følgende tre kataloger:

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

Kopiere overskriftsfilene

Nå skal vi kopiere Jemalloc.H, Jemalloc_defs.H, og Libjemalloc.A filer inne og inkluderer Lib Jemalloc inne i Jemalloc -biblioteket.

Generere overskriftsfil

Nå vil vi generere en overskriftsfil som heter userdefined_malloc.h. Deretter må vi skrive flere koder i denne overskriftsfilen. Kodene er beskrevet nedenfor:

Programmering Eksempel 1

Opprette en .C -fil for å kjøre koden ved å inkludere “userdefined_malloc.h ”headerfil.

#inkludere
#inkludere
#include “userdefined_malloc.h ”
int main ()

// Dette er pekeren (punktet) som vil holde baseadressen til blokken opprettet
int* poeng;
int n,
j;
// for å få tallene fra brukeren
printf ("Angi tall:");
Scanf ("%d", & n);
printf ("tallene som er lagt inn av brukeren: %d \ n", n);
// tildeling av minnet dynamisk ved bruk av malloc ()
punkt = (int *) malloc (n * sizeof (int));
// sjekke om minnet tildelt av malloc () eller ikke
if (point == null)

printf ("Memory ikke tildelt.\ n ");
Avslutt (0);

ellers

// minnet tildelt
printf ("Memory tildelt vellykket av malloc () \ n");
// for loop for å få elementer i matrisen
for (j = 0; j < n; ++j)
punkt [j] = j + 1;

// Viser alle elementene som er til stede i matrisen
printf ("Elementene i matrisen er:");
for (j = 0; j < n; ++j)
printf ("%d,", punkt [j]);


printf ("\ n");
retur 0;

Generere makefilen

$ gedit makefile



CC = GCC
CFLAGS = -Wall -G
Inkluderer = -i ./inkludere/
Alloc_dep =./lib/libjemalloc.en
Alloc_link = $ (alloc_dep) -lpthread -ldl
Testing: Testing.o
$ (CC) $ (inkluderer) $ (CFLAGS) -O Testing Testing.o $ (alloc_link)
testing.O: Testing.c $ (alloc_dep)
$ (CC) -C $ (inkluderer) $ (CFLAGS) testing.c
ren:
RM -f testingstesting.o


Produksjon

$ make
$ ./testing


Forklaring

Her prøver vi å kjøre et program for Jemalloc () -funksjonen ved å inkludere overskriftsfilen som heter “Userdefined_malloc.h ”. Nå skriver vi inn noen verdier fra brukeren og får minnet dynamisk ved å bruke Malloc () -funksjonen. Malloc () -funksjonen skaper en minneblokk og returnerer deretter adressen. For å skrive ut verdiene, bruker vi en loop. Jemalloc () -funksjonen utfører dette programmet ved å inkludere overskriftsfilen i programmet.

Sjekk programmet ved hjelp av GDB -verktøyet

$ GDB ./testing




Forklaring

For å feilsøke eller se trinn-for-trinn det samme programmet, kan vi bruke “$ GDB ./testing ”. Vi skriver ganske enkelt “$ GDB ./testing ” I ledeteksten og kjør dette programmet ved hjelp av GDB -kommandoer som “R”, “S”, “N”, etc.

Programmering Eksempel 2

Her vil vi prøve å utføre noen operasjoner med dataene som allerede er fjernet med gratis () -funksjonen.

#inkludere
#inkludere
#include "userdefined_malloc.h "
int main ()

int *darray;
int i, n;
printf ("\ n Angi størrelse på array =");
Scanf ("%d", & n);
darray = (int *) malloc (n *sizeof (int));
printf ("\ n før du setter innhold \ n");
for (i = 0; i
printf ("%d \ n", darray [i]);

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

printf ("\ n innholdet i matrisen er \ n");
for (i = 0; i
printf ("%d \ n", darray [i]);

darray = null;
gratis (Darray);
gratis (Darray);
printf ("\ n etter å ha frigjort minnet \ n");
for (i = 0; i
printf ("%d \ n", darray [i]);

printf ("\ n");

Kompilere og kjøre programmet

$ make
$ ./testing


Kjør ved hjelp av GDB

$ GDB ./testing




Forklaring

I dette spesielle programmeringseksemplet vil vi lage en matrise dynamisk ved hjelp av Malloc () -funksjonen og legge noen verdier fra brukeren ved hjelp av for loop. Deretter skriver vi ut disse verdiene på skjermen. Etter, vil vi få minnet ved å kalle gratis () -funksjonen. Denne funksjonen behandler alt minnet som er opprettet dynamisk av Malloc () -funksjonen.

Etter det, hvis vi prøver å skrive ut disse verdiene igjen, med tanke på at alle verdiene er til stede i matrisen og kjører programmet, vil vi se en viss feil som “Segmenteringsfeil (kjernedumped)”. For etter å ha frigjort minnet, hvis vi igjen vil utføre noen operasjoner på disse verdiene, er det ikke mulig praktisk, ettersom gratis () -funksjonen fjerner alle dataene.

Konklusjon

I denne artikkelen prøver vi å forstå Jemalloc () -funksjonen ordentlig, med start fra nedlastingen, installasjonen, lage headerfil og kjøre et program. Det er veldig nyttig å bruke Jemalloc () -funksjonen for å gjøre livet enklere for andre funksjoner, for eksempel Malloc (), Calloc () -funksjon, RealLOC () -funksjon og gratis () -funksjon. Jemalloc () -funksjonen utfører disse funksjonene i programmet vellykket.