Hacker News

Ha yini ku averiwa ko sungula ka C++ (m) ku tshama ku ri 72 KB?

Mavonelo

13 min read Via joelsiks.com

Mewayz Team

Editorial Team

Hacker News

Xihundla Lexi Nga Endzhaku Ka Avelo Ya Wena Yo Sungula Ya C++

U tsala nongonoko wo olova wa C++. int yin’we leyintshwa. Tibayiti ta mune. U pfurheta strace kumbe profiler ya memori leyi u yi tsakelaka, naswona hi kona — phurosese ya wena yi komberile ntsena kwalomu ka 72 KB ku suka eka sisiteme yo tirha. A hi 4 wa tibayiti. A hi 64 wa tibayiti. A ku helela 72 KB. Loko u tshame u languta nomboro yoleyo hi tihlo ro tshwuka ivi u tivutisa loko switirhisiwa swa wena swi ku hembela, a wu wexe. Mahanyelo lawa ya vonakaka ya hlamarisa i xin’wana xa swivutiso leswi talaka ku vutisisiwa exikarhi ka vaendli va C++ lava chelaka eka swilo swa le ndzeni swa memori ro sungula, naswona nhlamulo yi hi yisa eka riendzo ro tsakisa eka swiphemu leswi tshamaka exikarhi ka khodi ya wena na hardware ya xiviri.

Leswi Humelelaka Loko U Fonela new

Ku twisisa nhlayo ya 72 KB, u fanele ku landzelerisa nxaxamelo wa avelo lowu heleleke. Loko khodi ya wena ya C++ yi tirhisa new int, muhlengeleti u hundzuluxela sweswo eka ku vitaniwa eka operator new, leyi eka tisisiteme to tala ta Linux yi rhumelaka eka malloc ku suka eka glibc. Kambe malloc a yi kombeli hi ku kongoma eka kernel 4 wa tibayiti ta memori. Kernel yi tirha hi matluka — hi ntolovelo 4 KB eka x86_64 — naswona ntsengo wa ku vitaniwa ka sisiteme i wukulu swinene loko wu pimanisiwa na mfikelelo wo olova wa memori. Ku vitana brk() kumbe mmap() eka avelo rin’wana na rin’wana ra munhu hi xiyexe swi ta endla leswaku nongonoko wihi na wihi lowu nga riki wa nkoka wu sila wu yima.

Ematshan’wini ya sweswo, muaveri wa memori wa glibc — ku tirhisiwa loku vuriwaka ptmalloc2, hi koxe ku huma eka xikhale xa Doug Lea xa dlmalloc — xi tirha tanihi munhu wa le xikarhi. Yi kombela swibokisana leswikulu swa memori eka kernel ka ha ri emahlweni, ivi yi swi vatla swi va swiphemu leswitsongo loko nongonoko wa wena wu swi lava. Lexi i xivangelo xa xisekelo xa ku averiwa ka wena ko sungula ka 4-byte ku hlohlotela xikombelo lexikulu swinene eka sisiteme yo tirha. Muaveri a nga ri ku tlanga hi mali. I ku va na maqhinga.

Ku tsema 72 KB: Laha Tibayiti Ti Fambaka kona

Nhlawulo wo sungula wa avelo wu huma eka swiphemu swo hlayanyana swo hambana leswi nkarhi wo famba wu faneleke ku swi sungula wu nga si ku nyika hambi ku ri byte yin’we ya memori leyi tirhisiwaka. Ku twisisa xiphemu xin’wana na xin’wana swi hlamusela leswaku hikokwalaho ka yini nomboro yi fika laha yi fika kona.

Xo sungula, malloc ya glibc yi sungula main arena — xivumbeko xo sungula xa vuhlayisi bya tibuku lexi landzelelaka maavelo hinkwawo eka thread leyikulu. Ndhawu leyi yi katsa metadata ya nhulu, swikombiso swa nxaxamelo wa mahala, na swivumbeko swa bin swa vukulu byo hambana bya avelo. Muaveri u andzisa ku wisa ka phurogireme hi ku tirhisa sbrk(), naswona ku engeteriwa ko sungula ku lawuriwa hi parameter ya le ndzeni leyi vuriwaka M_TOP_PAD, leyi tiyimiseleke ku va 128 KB ya ku padding. Kambe, xikombelo xo sungula xa xiviri xi lulamisiwile eka ku ringanisiwa ka pheji na xiyimo xo wisa lexi nga kona, leswi talaka ku endla leswaku ku va na xikombelo xo sungula lexitsongo — hi ntolovelo xi fika ekusuhi na nhlayo yoleyo ya 72 KB eka phurosese leyi ha ku sungulaka.

Xa vumbirhi, ku sukela eka glibc 2.26, muaveri u sungula thread-local cache (tcache) eka ku tirhisiwa ko sungula. Tcache yi na 64 wa mabindzu (yin’we hi tlilasi ya sayizi ya avelo leritsongo), yin’wana na yin’wana yi kota ku khoma ku fika eka 7 wa swiphemu leswi hlayisiweke. tcache_perthread_struct hi yoxe yi dya kwalomu ka 1 KB, kambe xiendlo xo yi sungula xi hlohlotela ku lulamisiwa ka arena loku anameke. Xa vunharhu, nkarhi wo famba wa C++ se wu endlile maavelo main() ya wena yi nga si tirha hambi ku ri ku tirha — vaendli va static, ku sunguriwa ka buffer ya iostream ya std::cout na vanghana, na ku lulamisiwa ka ndhawu hinkwaswo swi hoxa xandla eka footprint yoleyo yo sungula ya nhulu.

Sisiteme ya Arena na leswaku Ha yini ku Avela ka le Mahlweni ka Vutlhari

Xiboho xo avela ka ha ri emahlweni xiphemu lexikulu xa memori ku tlula ku xi kombela hi swiphemuphemu a hi mhangu ya ku tirhisiwa. I ku cincana ka vunjhiniyara loku endliweke hi vomu loku dzimeke timitsu eka makume ya malembe ya ntokoto wa minongonoko ya tisisiteme. Ku vitaniwa kun’wana na kun’wana eka brk() kumbe mmap() ku katsa ku cinca ka mongo ku suka eka ndhawu ya mutirhisi ku ya eka ndhawu ya kernel, ku cinciwa ka mimepe ya memori ya xiviri ya phurosese, na ku pfuxetiwa ka tafula ra matluka loku nga vaka kona. Eka hardware ya manguva lawa, ku vitana ka sisiteme yin’we ku durha kwalomu ka 100-200 wa ti nanoseconds — a swi nga ri swa nkoka hi ku tihambanisa, i khombo hi xikalo.

Xiya nongonoko lowu endlaka 10,000 wa maavelo lamantsongo hi nkarhi wa ku sungula. Handle ka ku averiwa ka le mahlweni, sweswo swi ta vula 10,000 wa tifoyini ta sisiteme, leti durhaka kwalomu ka 1-2 wa timilisekondi ta pure overhead. Hi avelo leri simekiweke eka arena, avelo ro sungula ri hlohlotela ku vitaniwa ka sisiteme yin’we, naswona avelo leri landzelaka ra 9,999 ri tirhisiwa hi ku helela eka ndhawu ya mutirhisi hi ku tirhisa tinhlayo ta pointer na matirhelo ya nxaxamelo lowu hlanganisiweke — yin’wana na yin’wana yi teka kwalomu ka 10-50 wa ti nanoseconds. Tinhlayo a ti kanakanisi: ku averiwa ka le mahlweni ku hlula hi tioda ta vukulu.

72 KB leyi u yi vonaka eka avelo ra wena ro sungula a hi memori leyi tlangisiwaka — i vuvekisi bya matirhelo. Muaveri u becha leswaku nongonoko wa wena wu ta endla maavelo yo tala ku nga ri khale, naswona kwalomu ka xiyimo xin’wana ni xin’wana xa xiviri, ku becha koloko ku hakela hi ndlela yo saseka. Ntsengo wa ndhawu ya tiadirese ta xiviri leyi nga tirhisiwangiki kahlekahle i zero eka tisisiteme ta manguva lawa ta 64-bit.

Miehleketo ya Xiviri vs. Miehleketo ya Miri: Ha yini Swi nga Ri Na Nkoka

Ku vilela loku tolovelekeke eka vatumbuluxi lava hlanganaka na mahanyelo lawa ro sungula i ku tlanga hi switirhisiwa. Loko ndzi lava ntsena 4 wa ti-byte, ha yini nongonoko wa mina wu dya 72 KB? Vutivi bya nkoka hileswaku ku tsundzuka ka xiviri a hi ku tsundzuka ka xiviri. Loko glibc yi engetela ku wisa ka nongonoko hi 72 KB, kernel yi pfuxeta mimepe ya memori ya xiviri ya phurosese, kambe a yi hatli yi seketela matluka wolawo hi RAM ya xiviri. Matluka ya xiviri ya xiviri ya averiwa hi ku landza xilaveko hi ku tirhisa swihoxo swa matluka — ntsena loko nongonoko wa wena wu tsala eka adirese yo karhi laha kernel yi avela tluka ra xiviri ra memori eka yona.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

Leswi swi vula leswaku hambi leswi sayizi ya xiviri ya phurosese ya wena yi engetelekaka hi 72 KB, sayizi ya yona ya resident set (RSS) — nhlayo ya RAM ya xiviri leyi dyiweke hakunene — yi engeteleka hi matluka ntsena lawa u ma khumbaka hakunene. Eka int yin’we leyintshwa, hi ntolovelo sweswo i tluka rin’we ra 4 KB, ku engetela eka matluka wahi na wahi lawa metadata ya arena yi ma tekaka. Ndhawu ya xiviri leyi saleke yi tshama kwalaho, yi lunghekele ku tirhisiwa, yi nga durhi nchumu handle ka ndhawu ya tiadirese — leyi u nga na 128 TB eka sisiteme ya Linux ya 64-bit.

Ku hambana loku i ka nkoka swinene loko ku endliwa profayili na ku langutisisa switirhisiwa swa vuhumelerisi. Loko u aka sofwere leyi lavaka ku landzelerisa ku tirhisiwa ka switirhisiwa swa xiviri — hambi ku ri SaaS backend, microservice, kumbe phayiphi ya vuxopaxopi ku fana na leyi tirhaka eka tipulatifomo to fana na Mewayz eka matirhelo ya bindzu — u fanele ku tshama u ri karhi u languta RSS ku tlula mpimo wa xiviri. Switirhisiwa swo fana na /proc/[pid]/smaps, valgrind --tool=massif, na pmap swi nga ku nyika swikombiso swa milenge swa memori ya xiviri leswi kongomeke ku tlula tinhlayo ta memori ya xiviri leti hambukisaka.

Ndlela leyi Vaaveri vo Hambana va Khomaka Ndlela yo Sungula

Nhlayo ya 72 KB yi kongomile eka ptmaloc2 ya glibc. Vaaveri van’wana va endla ku cinca-cinca ko hambana, naswona mali yo sungula ya avelo ya le henhla ya hambana hi ku ya hi sweswo. Ku twisisa ku hambana loku i swa nkoka loko u hlawula muaveri wa switirhisiwa leswi nga na vuxiyaxiya eka matirhelo.

  • jemalloc (yi tirhisiwa hi Facebook, FreeBSD) — Yi tirhisa xivumbeko xa arena xa granular swinene lexi nga na ti-cache ta thread-local. Ntsengo wo sungula wa le henhla wu tala ku va ehenhla (hakanyingi 200+ KB) kambe wu tisa matirhelo yo antswa ya tithread to tala hikwalaho ka ku hunguteka ka ku kanetana ka swilotlelo.
  • tcmalloc (Google’s Thread-Caching Malloc) — Yi avela cache ya thread yin’wana na yin’wana ya kwalomu ka 2 MB hi ku tiyimisela, na ku averiwa ka le mahlweni ka matimba. Ntsengo wo sungula wa le henhla wu le henhla, kambe maavelo lamantsongo lama landzelaka ya hatlisa swinene.
  • musl libc's malloc — Yi tirhisa dizayini yo olova swinene leyi simekiweke eka mmap eka maavelo hinkwawo. Ntsengo wo sungula wa le henhla i wutsongo (hakanyingi i 4 KB ntsena hi avelo), kambe ntsengo wa avelo wun’wana na wun’wana wu le henhla hikwalaho ka ku vitaniwa ka sisiteme nkarhi na nkarhi.
  • mimalloc (Microsoft) — Yi tirhisa avelo leri simekiweke eka swiyenge na swiyenge swa 64 MB. Avelo ro sungula ri hlohlotela vuhlayiselo bya xiviri bya 64 MB (hi ku tinyiketela lokutsongo ka xiviri), ndhawu ya adirese yo xaviselana ya ndhawu yo hlawuleka na vuhumelerisi.

Ku hlawula exikarhi ka swiavelo leswi swi titshege hi ku helela hi ntirho wa wena. Eka switirhisiwa swa sevha leswi tirhaka nkarhi wo leha leswi nga na avelo ro tika ra tithread to tala, jemalloc kumbe tcmalloc hi ntolovelo yi tlula default ya glibc. Eka tisisiteme leti nghenisiweke leti siveleriweke hi memori, endlelo ro olova ra musl ri nga ha tsakeriwa hambileswi ku nga na vuhumelerisi bya le hansi. Eka switirhisiwa swo tala swa xikongomelo xo angarhela swa desktop na server, ptmaloc2’s 72 KB initial overhead yi yimela default leyi twalaka leyi tirhaka kahle handle ko tuning.

Ku Tunisa Mahanyelo ya Avelo ro Sungula

Loko ntsengo wo sungula wa 72 KB wa xiviri wu ri na xiphiqo hakunene eka xiyimo xa wena xa matirhiselo — kumbexana u tswala magidi ya maendlelo ya nkarhi wo koma, yin’wana na yin’wana yi endla ntsena maavelo yo hlayanyana — glibc yi nyika ti tunables to hlayanyana hi ku tirhisa mallopt() na ndyangu wa MALLOC_ wa swilo leswi cinca-cincaka swa mbango.

Parameter ya M_TOP_PAD yi lawula leswaku muaveri u kombela memori yo tanihi kwihi yo engetela ku tlula leswi lavekaka hi xihatla. Ku yi veka eka 0 hi mallopt(M_TOP_PAD, 0) swi byela muaveri ku kombela ntsena leswi lavekaka, leswi hungutaka mali yo sungula ya le henhla swinene. Parameter ya M_MMAP_THRESHOLD yi lawula vukulu lebyi ehenhla ka byona swiavelo swi tirhisaka mmap ematshan’wini ya arena. M_TRIM_THRESHOLD yi lawula loko memori leyi ntshunxiweke yi tlheriseriwa eka OS. Naswona ku sukela eka glibc 2.26, swihundzuluxi swa glibc.malloc.tcache_count na glibc.malloc.tcache_max swi ku pfumelela ku lawula mahanyelo ya cache ya thread.

Hambiswiritano, rito ra xitsundzuxo: ku tuning ti parameters leti handle ko benchmarking hi vukheta kwalomu ka minkarhi hinkwayo swi nyanyisa swilo. Ti defaults ti hlawuriwile hi ku ya hi ku anama ka real-world profiling, naswona ti yimela ndhawu yo nandziha eka vunyingi lebyikulu bya ndzhwalo wa ntirho. Handle ka loko uri na vumbhoni byo tiya kusuka eka production profiling leswaku malloc overhead i bottleneck — naswona u pimile mbuyelo wa ku cinca ka wena — tshika ti defaults ntsena. Ku antswisiwa ka allocator ka ha ri na nkarhi i xivumbeko xa vukanganyisi ngopfu xa ku byewula ka yak lexi dyeke tiawara to hlaya ta vunjhiniyara ku vuyeriwa hi ndlela leyi nga nyawuriki.

Leswi Leswi Swi Hi Dyondzisaka swona Hi Minongonoko Ya Tisisiteme

Xihundla xa avelo ro sungula xa 72 KB, eka xisekelo xa xona, i dyondzo mayelana na tileyara ta abstraction. C++ yi ku nyika xifaniso xa leswaku new int yi avela 4 wa tibayiti. Mpimo wa ririmi wu vula tano. Xikombiso xa wena xa mianakanyo xi vula tano. Kambe exikarhi ka khodi ya wena na hardware ku tshama nhulu ya tisisiteme leti rharhanganeke — nkarhi wo famba wa C++, avelo wa layiburari ya C, sisiteme ya le hansi ya memori ya xiviri ya kernel, na MMU na TLB ya hardware — yin’wana na yin’wana yi engetela mahanyelo ya yona, ku antswisiwa, na le henhla.

Leswi a hi xihoxo. I yinhla hinkwayo ya software ya tisisiteme. Leyara yin’wana na yin’wana yi kona ku tlhantlha xiphiqo xa xiviri: muaveri u kona hikokwalaho a wu fanelanga ku endla swikombelo swa sisiteme eka avelo rin’wana na rin’wana. Sisiteme ya memori ya xiviri yi kona hikokwalaho a wu fanelanga ku lawula memori ya xiviri hi ku kongoma. Mufambisi wa swihoxo swa pheji u kona hikwalaho memori yi tinyiketela hi ku loloha na hi ndlela leyinene. Leyara yin’wana na yin’wana yi xaviselana nhlayo yitsongo ya ku va erivaleni ku kuma nhlayo leyikulu ya matirhelo na ku olova.

Vaendli lava akaka tisisiteme leti tshembekaka swinene, leti tirhaka kahle swinene hi lava va twisisaka swiphemu leswi — ku nga ri hikuva va lava ku ehleketa hi swona nkarhi hinkwawo, kambe hikuva loko ku humelela nchumu lowu nga languteriwangiki (ku fana na avelo ra 72 KB leri nga twisisekiki), va na modele wa miehleketo ku twisisa leswaku hikokwalaho ka yini. Kunga khathariseki leswaku u aka sisiteme ya mabindzu ya nkarhi wa xiviri, njhini ya ntlangu, kumbe pulatifomo ya bindzu leyi tirhelaka magidi ya vatirhisi, vuswikoti byo anakanyisisa hi leswi khodi ya wena yi swi endlaka hakunene eka xiyimo xa sisiteme hi swona swi hambanisaka vaendli lava nga na vuswikoti eka lava hlawulekeke. 72 KB a hi xihoxo. I avelo wa wena loyi a endlaka ntirho wa yena hi vutlhari.

Aka OS ya Bindzu ra Wena Namuntlha

Ku suka eka va-freelancer ku ya eka tiejensi, Mewayz yi nyika matimba eka 138,000+ wa mabindzu hi 207 wa mimojula leyi hlanganisiweke. Sungula mahala, ndlandlamuxa loko u kula.

Endla akhawunti ya Mahala →

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime