Google nauja atminties paskirstymo sistemos versija , kuris naudojamas daugelyje vidinių „Google“ projektų. TCMalloc kodas parašytas C++ ir pagal Apache licenciją. Norėdami dirbti, jums reikia kompiliatoriaus, kuris palaiko C++17 C++ kalbai ir C11 C kalbai (gcc 9.2+ arba clang 9.0+). Iš operacinių sistemų tik Linux (x86, PPC).
Pastebėtina, kad nuo 2005 metų atsirado dar vienas tcmalloc variantas, kuris įtraukta į pakuotę („Google Performance Tools“). Tai du bendrų šaknų turinčių projektų. Naujasis TCMalloc yra daugiau bandymas atverti dabartinius „Google“ vidinius pokyčius, tačiau juo dar nesiekiama teikti stabilaus ABI ir palaikyti daugybę operacinių sistemų. Senasis tcmalloc iš gperftools ir toliau bus palaikomas, tačiau naujų funkcijų, tokių kaip talpyklos susiejimas su CPU, į jį perkelti neplanuojama.
TCMalloc apima C funkcijos malloc() ir C++ "naujo" operatoriaus įgyvendinimą, optimizuotą didelio našumo ir naudojimui kelių gijų programose. TCMalloc taip pat suteikia savianalizės ir profiliavimo galimybes, kurios leidžia programai gauti išsamios informacijos apie krūvos atminties naudojimą. Kode naudojami optimizavimai, pagrįsti šiuolaikinėmis C++ kalbos ypatybėmis, pvz
ištrinti operatorių su iš C++14 ir atminties paskirstymas su iš C++17.
TCMalloc Jį sudaro trys komponentai: priekinė dalis su talpykla, skirta greitai paskirstyti ir atlaisvinti atmintį, sluoksnis, skirtas priekinės dalies talpyklai užpildyti, ir galinė dalis, atliekanti tokias operacijas kaip atminties gavimas iš operacinės sistemos, didelių nenaudojamos atminties dalių valdymas ir perteklinės atminties grąžinimas atgal į OS. Talpykla yra neužrakinta ir veikia procesoriaus apribotu režimu, tačiau grįžta prie gijų apriboto talpyklos modelio, jei OS branduolyje trūksta reikiamos funkcijos (centrinio procesoriaus apribota talpykla veikia tik naujesniuose branduoliuose). Linux). Užpakalinė dalis palaiko darbą tiek su įprastais atminties puslapiais, tiek su dideliais puslapiais.
Pagrindinės TCMalloc savybės:
- Greitas atminties paskirstymas ir išskyrimas naudojant talpyklą. Daugeliui atminties paskirstymų nereikia užrakinti, o tai užtikrina gerą mastelio keitimą labai lygiagrečioms, kelių gijų programoms;
- Lankstus atminties naudojimas, leidžiantis pakartotinai panaudoti atlaisvintas atminties sritis įvairaus dydžio objektams arba grąžinti atmintį operacinei sistemai;
- Mažos pridėtinės išlaidos vienam objektui, paskirstant vienodo dydžio objektų puslapius ir efektyviai atvaizduojant mažus objektus. Palaikomi 4KiB, 8KiB, 32KiB ir 256KiB dydžių loginiai puslapiai. Pavyzdžiui, užklausant 512 baitų atminties blokų, 4 baitų objektams bus skirtas visas 512KiB puslapis, kuriame gali tilpti 8 tokie objektai;
- Tikslus derinimas galimas nustatant talpyklos dydį ir atminties grąžinimo į OS intensyvumo parametrus;
- Pateikiama išsami informacija, skirta programos atminties naudojimui analizuoti.
Šaltinis: opennet.ru
