Hacker News

Maaliif ramaddiin C++ (m) jalqabaa yeroo hunda 72 KB ta'a?

Yaada

8 min read Via joelsiks.com

Mewayz Team

Editorial Team

Hacker News

Iccitii Ramaddii C++ Kee Jalqabaa Duuba Jiru

Sagantaa C++ salphaa barreessita. Tokko haaraa int. Baayitii afur. strace ykn piroofaayilii yaadannoo jaallattu ni dhukaasta, achi jira — adeemsi kee reefuu tilmaamaan 72 KB sirna hojii irraa gaafate. Baayitii 4 miti. Baayitii 64 miti. Guutuu 72 KB. Lakkoofsa sana ijaan ilaaltee meeshaan kee si sobaa jiraa jettee yaaddee beekta taanaan, ati kophaa kee miti. Amalli ajaa'ibaa fakkaatu kun gaaffilee baay'inaan gaafataman keessaa tokko yoo ta'u, yeroo jalqabaaf hojjettoonni C++ gara keessoo mimoorii keessa qotan keessaa tokko yoo ta'u, deebiin isaas imala hawwataa ta'e laayiyeroota koodii kee fi haardwaara qabatamaa gidduu taa'an keessa nu geessa.

Yeroo haaraa

Bilbiltan Maaltu Ta'a

Lakkoofsa 72 KB hubachuuf, sansalata ramaddii guutuu hordofuu qabda. Yeroo koodii C++ kee new int raawwatu, qindeessaan sana gara waamicha gara operator newtti hiika, kunis sirnoota Liinux baay'ee irratti gara malloc glibc irraa bakka bu'a. Garuu malloc kallattiin kernel irraa yaadannoo baayitii 4 hin gaafatu. Kernel fuula keessatti hojjeta — akkaataa idileetti 4 KB x86_64 irratti — fi baasii waamicha sirnaa qaqqabummaa yaadannoo salphaa wajjin walqabatee guddaadha. Ramaddii dhuunfaa hundaaf brk() ykn mmap() waamuun sagantaa xiqqaa hin taane kamiyyuu akka dhaabbatu taasisa.

Inumaayyuu, ramaddiin yaadannoo glibc — hojiirra oolmaa ptmalloc2 jedhamu, mataan isaa kan Doug Lea's classic dlmalloc irraa bu'e — akka giddu galeessaatti hojjeta. Fuulduraan kernel irraa bilookii mimoorii gurguddoo gaafata, sana booda akka sagantaa kee barbaadutti xixiqqootti boca. Kun sababa bu'uuraa ramaddiin baayitii 4 kee inni jalqabaa gaaffii baay'ee guddaa gara sirna hojiitti kakaasudha. Ramaddiin qisaasama hin jiru. Tarsiimoo ta'uudha.

72 KB qoqqooduun: Bakka Baayitoonni Deemu

Ramaddiin jalqabaa qaamolee adda addaa hedduu irraa kan dhufu yoo ta'u, yeroon gaggeeffamaa baayitii tokko illee yaadannoo fayyadamuu danda'u siif kennuu isaa dura jalqabuu qaba. Tokkoon tokkoon qaama hubachuun lakkoofsi maaliif bakka bu'u akka bu'u ibsa.

Jalqaba, malloc glibc main arena jalqaba — caasaa galmee jalqabaa kan ramaddii hunda dhangii ijoo irratti hordofu. Dirreen kun meetadaataa tuullaa, agarsiistota tarree bilisaa, fi caasaa bin hamma ramaddii adda addaa of keessatti qabata. Ramaddiin cabbii sagantaa karaa sbrk() dheeressa, dheerinni jalqabaa immoo qaree keessoo M_TOP_PAD jedhamu, kan durtii gara 128 KB kan ta'utti bulfama. Haa ta'u malee, gaaffiin jalqabaa qabatamaan qindaa'ina fuulaafi bakka cabbii jiruuf sirreeffama, kunis yeroo baay'ee gaaffii jalqabaa xiqqaa ta'e argamsiisa — yeroo baay'ee adeemsa haaraa jalqabame irratti lakkoofsa 72 KB sanatti dhihoo bu'a.

Lammaffaa, erga glibc 2.26, ramaddiin fayyadama jalqabaa irratti kaachota naannoo dhangii (tcache) jalqaba. tcache'n bins 64 of keessaa qaba (tokko gita guddina ramaddii xiqqaa tokkoof), tokkoon tokkoon isaanii hanga 7 cached chunks qabachuu danda'u. tcache_perthread_struct mataan isaa naannoo 1 KB fayyadama, garuu gochi isa jalqabsiisuu qindeessaa dirree bal'aa kakaasa. Sadaffaa, yeroon gaggeeffama C++ osoo main() kee illee hin hojjetiin dura ramaddii raawwateera — ijaarsitoonni istaatiksii, jalqabbii iostream buffer std::cout fi hiriyyootaaf, fi qindeessaan naannoo hundi isaanii miila tuullaa jalqabaa sanaaf gumaachu.

Sirna Dirree fi Ramaddiin Duraa Maaliif Smart

Murteen yaadannoo guddaa dursanii ramaduu osoo hin taane ciccitaadhaan gaafachuu caalaa balaa hojiirra oolmaa miti. Innis itti yaadanii wal-jijjiirraa injinariingii muuxannoo sagantaa sirna waggoota kurnan lamaan darbaniif hundee godhatedha. Waamichi gara brk() ykn mmap() hunduu jijjiirraa haalata iddoo fayyadamaa irraa gara iddoo kernel, fooyya'iinsa kaartaa yaadannoo dhugaa adeemsaa, fi fooyya'iinsa gabatee fuula ta'uu danda'u of keessatti qabata. Haardwaara ammayyaa irratti, bilbilli sirna tokkoo tilmaamaan naannoo sekondii 100-200 gatii qaba — adda baafamee waan xiqqaa, guddinaan balaa guddaa qaba.

Sagantaa yeroo jalqabbii ramaddii xixiqqoo 10,000 godhu ilaali. Dursee ramaddii malee, sun bilbila sirnaa 10,000 jechuu ta'a, tilmaamaan miliisekondii 1-2 baasii ol'aanaa qulqulluu ta'a. Ramaddii dirree irratti hundaa'een, ramaddiin jalqabaa waamicha sirnaa tokko kan kakaasu yoo ta'u, ramaddiin itti aanu 9,999 guutummaatti iddoo fayyadamaa keessatti karaa herrega agarsiisaa fi hojiiwwan tarree-walqabsiifame tajaajilu — tokkoon tokkoon isaanii tilmaamaan naannoo sekondii 10-50 fudhata. Herregni wal-xaxaa miti: ramaddiin duraa tartiiba guddinaatiin mo'ata.

KB 72 ramaddii kee isa jalqabaa irratti argitu yaadannoo qisaasama miti — invastimantii raawwii hojiiti. Ramaddiin sagantaa kee yeroo dhiyootti ramaddii dabalataa akka godhu bet gochaa jira, fi haala addunyaa dhugaa hunda keessatti jechuun ni danda'ama, bet sun akka gaariitti kaffala. Baasii iddoo teessoo dhugaa hin fayyadamne sirna ammayyaa 64-bit irratti bu'uuraan zeeroo dha.

jedhamuun beekama

Yaadannoo Virtual vs. Yaadannoo Qaamaa: Maaliif Dhimma Hin Qabu

Yaaddoon misoomsitoota yeroo jalqabaaf amala kana qunnaman biratti qisaasama qabeenyaati. Yoo baayitii 4 qofa na barbaachise sagantaa koo maaliif 72 KB fayyadama? Hubannoon murteessaan yaadannoo vaartuwalii yaadannoo fiizikaalaa miti. Yeroo glibc cabbii sagantaa 72 KB dheeressu, kernel kaartaa yaadannoo dhugaa adeemsaa haaromsa, garuu fuula sana battalumatti RAM fiizikaalaan hin duubatti deebisu. Fuulonni fiizikaalaa dhugaa gaaffii irratti karaa dogongora fuula ramadamu — yeroo sagantaa kee teessoo murtaa'e tokkotti barreessu qofa kernel fuula yaadannoo dhugaa itti ramada.

💡 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 →

Kana jechuun, adeemsi kee guddinni dhugaa 72 KB yoo dabalullee, hanga tuuta jiraataa (RSS) isaa — hammi RAM fiizikaalaa qabatamaan fayyadame — fuula ati qabatamaan tuqxe qofaan dabalaa deema. new int tokkoof, sun akkaataa addaatiin fuula 4 KB tokko, dabalataan fuula kamiyyuu meetadaataan dirree qabate. Iddoon dhugaa hafe achi taa'a, itti fayyadamuuf qophaa'ee, iddoo teessoo malee homaa hin baasu — kana keessaa sirna Liinux 64-bit irratti TB 128 qabda.

Garaagarummaan kun yeroo piroofaayilii fi hordoffii aplikeeshiniiwwan oomishaa murteessaadha. Yoo sooftiweerii fayyadama qabeenya dhugaa hordofuu qabu ijaaraa jirta ta'e — SaaS duubbee, microservice, ykn ujummoo xiinxala akka warra waltajjiiwwan akka Mewayz irratti hojii daldalaaf hojjetan haa ta'u — yeroo hunda guddina dhugaa osoo hin taane RSS hordofuu qabda. Meeshaaleen akka /proc/[pid]/smaps, valgrind --tool=massif, fi pmap lakkoofsa yaadannoo dhugaa dogoggorsuu caalaa miila yaadannoo fiizikaalaa sirrii siif kennuu danda'u.

Akkaataa Ramaddiiwwan Adda Addaa Ramaddii Jalqabaa Qaban

Lakkoofsi 72 KB ptmaloc2 glibc'f addadha. Ramadditoonni biroo daldala adda addaa kan godhan yoo ta’u, baasii ol’aanaa ramaddii jalqabaa haaluma kanaan garaagarummaa qaba. Garaagarummaa kana hubachuun yeroo ramaddii aplikeeshiniiwwan raawwii irratti hundaa'aniif filattu gatii qaba.

    jechuun ni danda’ama
  • jemalloc (Facebook, FreeBSD fayyadama) — Caasaa dirree caalaatti granular ta'e kan kaachota thread-local wajjin fayyadama. Overhead jalqabaa ol'aanaa ta'uu barbaada (yeroo baay'ee 200+ KB) garuu sababa waldhabdee qulfii hir'ate irraa kan ka'e raawwii fooyya'aa multi-threaded kenna.
  • tcmalloc (Google's Thread-Caching Malloc) — Kaachota dhangii tokkoof tilmaamaan 2 MB durtiidhaan ramada, ramaddii dursaa aggaammii wajjin. Baasiin jalqabaa ol’aanaadha, garuu ramaddiin xixiqqoo itti aanan garmalee saffisaa dha.
  • musl libc's malloc — Ramaddii hundaaf dizaayinii baay'ee salphaa ta'e kan mmap irratti hundaa'e fayyadama. Baasiin jalqabaa xiqqaadha (yeroo baayyee ramaddii tokkoof KB 4 qofa), garuu baasii ramaddii tokkoof sababa waamicha sirnaa baay'ee ta'een ol'aanaadha.
  • mimalloc (Microsoft) — Ramaddii kutaa irratti hundaa'e kutaalee MB 64 waliin fayyadama. Ramaddiin jalqabaa 64 MB virtual reservation (of kennuu fiizikaalaa xiqqaa ta'een), iddoo teessoo daldalaa naannoo addaa fi bu'aa kakaasa.
jechuun ni danda’ama

Filannoon ramaddiiwwan kana gidduu jiru guutummaatti fe'iinsa hojii kee irratti hundaa'a. Appilikeeshiniiwwan sarvarii yeroo dheeraaf ramaddii ulfaataa dhangiiwwan hedduu qabaniif, jemalloc ykn tcmalloc akkaataa addaatiin durtii glibc caala. Sirnoota yaadannoo-daangaa ta'aniif, bu'aan gadi aanaa ta'us mala salphaan musl filatamaa ta'uu danda'a. Irra caalaan aplikeeshiniiwwan deeskitooppii fi sarvarii kaayyoo waliigalaa, ptmalloc2's 72 KB'n jalqabaa ol'aanaa durtii madaalawaa kan osoo hin qindeessin akka gaariitti hojjetu bakka bu'a.

Amala Ramaddii Jalqabaa qindeessuu

Yoo durtii 72 KB jalqabaa ol'aanaa haala itti fayyadama keetiif dhugaadhaan rakkoo qabaate — tarii adeemsa yeroo gabaabaa kumaatamaan lakkaa'aman dhalchaa jirta ta'e, tokkoon tokkoon isaanii ramaddii muraasa qofa godhu — glibc karaa mallopt() fi maatii jijjiiramoota naannoo MALLOC_ tunables hedduu kenna.

Qajeelchi M_TOP_PAD hammam yaadannoo dabalataa ramaddiin waan battalumatti barbaachisu irra darbee akka gaafatu to'ata. mallopt(M_TOP_PAD, 0) waliin gara 0tti saaguun ramaduun waan barbaachisu qofa akka gaafatu itti hima, baasii ol'aanaa jalqabaa baay'ee hir'isa. Qabduu M_MMAP_THRESHOLD hammangaa ol ramaddiiwwan dirree bakka mmap fayyadaman to'ata. M_TRIM_THRESHOLD yeroo yaadannoo bilisa ta'e gara OStti deebi'u to'ata. Akkasumas erga glibc 2.26, glibc.malloc.tcache_count fi glibc.malloc.tcache_max tunables amala kaachota dhangii akka to'attu si dandeessisu.

Haa ta'u malee, jecha of eeggannoo: of eeggannoodhaan osoo hin madaalin parameetaroota kana qindeessuun yeroo hunda jechuun ni danda'ama waan hunda hammeessa. Durtii kan filataman piroofaayilii addunyaa dhugaa bal'aa irratti hundaa'uun yoo ta'u, isaanis fe'iinsa hojii baay'eedhaaf bakka mi'aawaa bakka bu'u. Yoo ragaa cimaa piroofaayilii oomishaa irraa malloc overhead bottleneck ta'uu qabaatte malee — fi dhiibbaa jijjiirama keetii safartee jirta ta'e malee — durtii dhiisi. Yeroo malee optimization allcator keessumaa bifa haxxummaa yak shaving kan faayidaa xiqqaa argachuuf sa'aatii injinariingii lakkoofsa hin qabne fudhatedha.

Waa'ee Sagantaa Sirnaa Waan Kun Nu Barsiisa

Iccitiin ramaddii jalqabaa 72 KB, hundee isaa irratti, barumsa waa'ee laayiyeroota abstraakshiniiti. C++ new int baayitii 4 ramada jedhee fakkeessaa siif kenna. Istaandardiin afaanii akkas jedha. Moodeelli sammuu kee akkas jedha. Garuu koodii kee fi haardwaara gidduutti tuullaan sirnoota ulfaataa taa'a — yeroo gaggeeffama C++, ramaddii mana kitaabaa C, sirna xiqqaa yaadannoo dhugaa kernel, fi MMU fi TLB haardwaarii — tokkoon tokkoon isaanii amala mataa isaanii, fooyya'iinsa, fi baasii ol'aanaa dabaluu.

Kun mudaa miti. Innis qabxii guutuu sooftiweerii sirnaati. Tokkoon tokkoon laayibarii rakkoo dhugaa furuuf jira: ramaddiin jira kanaaf ramaddii hundaaf waamicha sirnaa gochuu hin qabdu. Sirni yaadannoo dhugaa (virtual memory system) waan jiruuf kallattiin yaadannoo fiizikaalaa bulchuu hin qabdu. Qabduun dogongora fuula waan jiruuf yaadannoo dadhaboo fi gahumsaan raawwatama. Laayibariin hundinuu raawwii fi mijannaa guddaadhaaf iftoomina xiqqaa daldala.

Developers kanneen sirnoota baay'ee amanamoo, ga'umsa olaanaa qaban ijaaran warra laayiyeroota kana hubatanidha — yeroo hunda waa'ee isaanii yaaduu waan qabaniif osoo hin taane, garuu yeroo wanti hin eegamne tokko ta'u (akka ramaddii dhoksaa 72 KB), maaliif akka ta'e hubachuuf moodeela sammuu waan qabaniif. Sirna daldalaa yeroo dhugaa, motora tapha, ykn waltajjii daldalaa fayyadamtoota kumaatamaan lakkaa'aman tajaajilu ijaaraa jirtanis, dandeettiin koodii kee sadarkaa sirnichaa irratti qabatamaan maal akka hojjetu sababeeffachuu, misoomsitoota gahumsa qaban kanneen adda ta'an irraa kan adda baasudha. 72 KB jechuun bug miti. Ramaddiin kee hojii isaa haala ajaa'ibaa ta'een hojjechaa jira.

OS Daldala Keessan Har'a Ijaadhaa

Hojjetoota bilisaa irraa kaasee hanga ejensiiwwanitti, Mewayz moojuulota walitti makaman 207n daldala 138,000+ humna kenna. Bilisaa jalqabi, yeroo guddattu fooyyessi.

Akkaawuntii Bilisaa Uumuu →
jedhamuun beekama

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