După 4 ani de la publicarea ultimei actualizări, este disponibilă versiunea 5.3.1 a bibliotecii de management al memoriei jemalloc, care oferă o implementare alternativă a funcțiilor malloc, optimizată pentru reducerea fragmentării și pentru a funcționa pe sisteme multiprocesor. Pentru a rezolva problemele de blocare pe sistemele multi-core, jemalloc folosește o zonă de alocare a memoriei izolată pentru fiecare nucleu CPU, ceea ce permite obținerea unei scalabilități liniare pe măsură ce numărul de fire de execuție crește.
În iunie 2025, autorul proiectului a oprit întreținerea și a mutat repository-ul jemalloc în modul de arhivare, dar acum o lună, compania Meta, care folosește jemalloc în infrastructura sa, a reluat dezvoltarea. Inițial, biblioteca a fost dezvoltată pentru FreeBSD și este utilizată implicit în acest sistem de operare din 2005. Codul bibliotecii este scris în C și este distribuit sub licența BSD.
Printre modificări:
- A fost implementată funcția pvalloc, care poate fi utilă în înlocuirea alocatoarei de memorie libc.
- În versiunile de depanare, a fost inclus un mod de detectare a apelului dublu al funcției free(). Pentru a ajusta dimensiunea stivei în cadrul căreia se desfășoară scanarea, a fost adăugat parametru debug_double_free_max_scan.
- A fost adăugată opțiunea de compilare „—enable-pageid” pentru a eticheta maparea memoriei, folosind prctl cu flagul PR_SET_VMA. După activare, maparea poate fi urmărită prin /proc//maps.
- A fost adăugat parametru „prof_bt_max”, care permite stabilirea adâncimii maxime a stivei pentru profilare.
- A fost adăugată opțiunea de compilare „—enable-force-getenv” pentru a folosi în cod funcția obișnuită getenv() în locul funcției protejate secure_getenv().
- A fost adăugată opțiunea de compilare „—disable-dss” pentru a dezactiva utilizarea funcției sbrk().
- A fost adăugat parametru „tcache_ncached_max” pentru a limita numărul de elemente în cache-ul firelor de execuție.
- A fost adăugat parametru „calloc_madvise_threshold” pentru a ajusta utilizarea mecanismului kernel madvise sau funcției memset pentru a inițializa memoria alocată prin funcția calloc.
- A fost adăugată opțiunea de compilare „—disable-user-config” pentru a dezactiva încărcarea setărilor din fișierul /etc/malloc.conf sau din variabila de mediu MALLOC_CONF.
- A fost adăugat parametru „process_madvise_max_batch” pentru a limita numărul de blocuri de memorie pentru fiecare operațiune batch madvise.
- A fost adăugat parametrul „disable_large_size_classes” pentru a dezactiva noul algoritm de calcul al dimensiunii memoriei alocate, care reduce costurile suplimentare la alocarea blocurilor mai mari de 4 pagini de memorie.
- Utilitarul mallctl a fost completat cu opțiuni: opt.prof_bt_max, arena.<i>.name, thread.tcache.max, thread.tcache.ncached_max.write, thread.tcache.ncached_max.read_sizeclass, arenas.hugepage și approximate_stats.active.
Sursa: opennet.ro
