Apay a ti umuna a C++ (m)allocation ket kanayon a 72 KB?
Dagiti Komento
Mewayz Team
Editorial Team
Ti Misterio iti Likud ti Umuna a C++ Allocation-mo
Agsuratka iti simple a programa ti C++. Maymaysa a baro nga int. Uppat a byte. Ipaputokmo ti strace wenno ti paboritom a memory profiler, ket adda dayta — ti prosesom ket nagkiddaw laeng iti agarup a 72 KB manipud iti sistema ti panagpataray. Saan nga 4 byte. Saan nga 64 byte. Ti naan-anay a 72 KB. No napadasam a nakatungtung-ed iti dayta a numero ket pinampanunotmo no agul-ulbod kenka ti tooling-mo, saankan nga agmaymaysa. Daytoy a kasla karkarna a kababalin ket maysa kadagiti masansan a maisaludsod kadagiti C++ a developer a mangkalkali kadagiti akin-uneg ti memoria iti umuna a gundaway, ken ti sungbat ket mangiturong kadatayo iti makaawis a panagdaliasat kadagiti suson a nakatugaw iti nagbaetan ti kodigom ken ti aktual a hardware.
Ania ti Mapasamak No Awagam ti baro
Tapno maawatan ti 72 KB a bilang, kasapulam a tuntonen ti naan-anay a kadena ti pannakabingbingay. No ti kodigom ti C++ ket mangipatungpal ti baro nga int, ti kompiler ket ipatarusna dayta iti panagayab iti operator new, nga iti kaaduan a sistema ti Linux ket mangidelegado iti malloc manipud iti glibc. Ngem ti malloc ket saan a direkta a dumawat iti kernel para iti 4 a byte ti memoria. Ti kernel ket agtartaray kadagiti panid — kadawyan a 4 KB iti x86_64 — ken ti gastos ti panagayab ti sistema ket dakkel unay a relatibo iti simple a panagserrek ti memoria. Ti panagayab ti brk() wenno mmap() para iti tunggal maysa nga indibidual a pannakabingbingay ket mangaramidto ti ania man a saan a trivial a programa a manggiling iti panagsardeng.
Imbes ketdi, ti memory allocator ti glibc — ti maysa nga implementasion a tinawtawagan iti ptmalloc2, a mismo a nagtaud manipud iti klasiko a dlmalloc ni Doug Lea — ket agtignay a kas maysa a mangibabaet. Daytoy ket agkidkiddaw kadagiti dadakkel a bloke ti memoria manipud iti kernel a nasaksakbay, kalpasanna ikitikitna dagitoy kadagiti babbabassit a pedaso bayat a kasapulan ti programam dagitoy. Daytoy ti kangrunaan a rason ti umuna nga 4-byte a pannakabingbingaymo ket mangtignay ti dakdakkel nga amang a kiddaw iti sistema ti panagpataray. Saan a masayang ti allocator. Daytat’ panagbalin nga estratehiko.
Panangdisseksion ti 72 KB: Sadino ti Papanan dagiti Byte
Ti umuna a panagbingbingay nga overhead ket naggapu manipud kadagiti sumagmamano a naisangayan a paset a ti oras ti panagtaray ket masapul nga irugi sakbay a mabalinna nga ited kenka urayno ti maymaysa a byte ti mausar a memoria. Ti pannakaawat iti tunggal paset ket mangilawlawag no apay a ti numero ket agdisso iti pagdissuanna.
Umuna, ti malloc ti glibc ket mangirugi ti kangrunaan nga arena — ti kangrunaan nga estruktura ti panagidulin ti libro a mangsurot kadagiti amin a pannakabingbingay iti kangrunaan a thread. Daytoy nga arena ket mangiraman ti metadata para kadagiti bunton, dagiti nawaya-a-listaan a mangitudo, ken dagiti estruktura ti bin para kadagiti nadumaduma a kadakkel ti panagbingbingay. Ti allokator ket mangpalawa ti panagsina ti programa babaen ti sbrk(), ken ti rugi a panagpaatiddog ket iturturayan babaen ti akin-uneg a parametro a tinawtawagan iti M_TOP_PAD, a daytoy ket agdefault iti 128 KB ti padding. Nupay kasta, ti aktual nga umuna a kiddaw ket nabaliwan para iti panagitunos ti panid ken ti addan a posision ti panagsardeng, a masansan nga agresulta iti basbassit nga umuna a kiddaw — kadawyan a panagdisso iti asideg dayta a 72 KB a bilang iti baro a nairugi a proseso.
Maikadua, manipud idi glibc 2.26, ti allocator ket mangirugi ti thread-local cache (tcache) iti umuna a panagusar. Ti tcache ket aglaon kadagiti 64 a bin (maysa iti tunggal maysa a klase ti kadakkel ti bassit-a-panagbingbingay), tunggal maysa ket makabael a mangtengngel aginggana kadagiti 7 a nai-cache a pedaso. Ti tcache_perthread_struct a mismo ket agkonsumo iti agarup a 1 KB, ngem ti aramid ti panangirugi iti daytoy ket mangtignay ti nalawlawa a panagisaad ti arena. Maikatlo, ti oras ti panagtaray ti C++ ket nakaaramiden kadagiti panagbingbingay sakbay pay a ti main()-mo ket agtaray — dagiti estatiko a konstruktor, ti panangrugi ti iostream a buffer para iti std::cout ken dagiti gagayyem, ken ti panagisaad ti lokal ket amin ket makatulong iti dayta nga umuna a tunton ti saka.
Ti Sistema ti Arena ken Apay a Nasirib ti Pre-Allocation
Ti pangngeddeng a nasakbay a mangituding ti dakkel a pedaso ti memoria imbes a kiddawen daytoy a saggaysa ket saan nga aksidente ti pannakaipatungpal. Daytoy ket inggagara a panagtagilako ti inhenieria a nairamut iti pinulpullo a tawen a kapadasan iti panagprograma kadagiti sistema. Tunggal panagayab iti brk() wenno mmap() ket mairaman ti panagbalbaliw ti konteksto manipud iti espasio ti agar-aramat aginggana ti espasio ti kernel, panagbalbaliw kadagiti panagimapa ti birtual a memoria ti proseso, ken dagiti mabalin a panagpabaro ti lamisaan ti panid. Iti moderno a hardware, ti maymaysa a panagayab ti sistema ket aggatad iti agarup a 100-200 a nanosegundos — awan pategna iti panagbukod, didigra iti sukog.
Ibilang ti programa a mangaramid ti 10,000 a babassit nga alokasion bayat ti panangrugi. No awan ti pre-allocation, kayatna a sawen dayta ti 10,000 nga awag ti sistema, nga aggatad iti agarup 1-2 milisegundos ti puro nga overhead. Iti maysa nga arena-a naibatay nga allokator, ti umuna a panagbingbingay ket mangtignay ti maymaysa a panagayab ti sistema, ken dagiti sumaganad a 9,999 a panagbingbingay ket naserbisioan nga interamente iti espasio ti agar-aramat babaen ti puntos nga aritmetika ken dagiti naisilpo-a-lista nga operasion — tunggal maysa ket mangala ti agarup a 10-50 a nanosegundos. Saan a mapagduaduaan ti matematika: mangabak ti pre-allocation babaen kadagiti order ti magnitude.
Ti 72 KB a makitam iti umuna nga alokasionmo ket saan a nasayang a memoria — daytoy ket maysa a panagpuonan ti panagaramid. Ti allocator ket agpusta a ti programam ket mangaramid iti ad-adu nga alokasion iti mabiiten, ket iti dandani tunggal pudno a senario, dayta a taya ket agbayad a guapo. Ti gastos ti saan a naus-usar a birtual nga espasio ti adres ket nasken a sero kadagiti moderno a 64-bit a sistema.
Birtual a Lagip vs. Pisikal a Lagip: Apay a Saan a Napateg
Ti gagangay a pakaseknan kadagiti agparparang-ay a makasabet iti daytoy a kababalin iti umuna a gundaway ket ti pannakasayang ti rekurso. No kasapulak laeng ti 4 a bytes, apay a ti programak ket agkonsumo iti 72 KB? Ti kritikal a pannakaawat ket ti ti birtual a memoria ket saan a pisikal a memoria. No ti glibc ket mangpalawa ti panagsina ti programa babaen ti 72 KB, ti kernel ket mangpabaro kadagiti panagimapa ti birtual a memoria ti proseso, ngem saan a dagus a mangsuporta kadagidiay a panid babaen ti pisikal a RAM. Dagiti aktual a pisikal a panid ket naited no kasapulan babaen ti dagiti biddut ti panid — no laeng ti programam ket agsurat iti espesipiko a pagtaengan a ti kernel ket mangituding ti pudno a panid ti memoria iti daytoy.
💡 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 →Daytoy ket kayatna a sawen nga urayno ti birtual a kadakkel ti prosesom ket dumakkel iti 72 KB, ti residente a kadakkel ti set (RSS) na — ti kaadu ti pisikal a RAM nga aktual a nabusbos — ket dumakkel babaen laeng dagiti panid nga aktual a sagidenmo. Para iti maymaysa a baro nga int, dayta ket kadawyan a maysa a 4 KB a panid, agraman ti ania man a panid a sakupen ti metadata ti arena. Ti nabati a birtual nga espasio ket agtugaw sadiay, a nakasagana para iti panagusar, nga awan ti magastos no di ti espasio ti adres — a daytoy ket addaanka iti 128 TB iti 64-bit a sistema ti Linux.
Daytoy a panaglalasin ket kritikal no agpropil ken mangmonitor kadagiti aplikasion ti produksion. No mangbangbangonka ti software a kasapulan a mangsurot ti pudno a panagusar ti rekurso — urayno daytoy ket maysa a SaaS a backend, maysa a mikroserbisio, wenno maysa nga analitiko a tubo a kas dagitoy nga agtartaray kadagiti plataporma a kas ti Mewayz para kadagiti panagpataray ti negosio — nasken a kanayon a bantayan ti RSS imbes a ti birtual a kadakkel. Dagiti ramit a kas ti /proc/[pid]/smaps, valgrind --tool=massif, ken pmap ket makaited kenka kadagiti umiso a pisikal a tugot ti saka ti memoria imbes a dagiti makaallilaw a bilang ti birtual a memoria.
Kasano a Dagiti Nadumaduma nga Allokator ket Mangtamingda ti Umuna nga Allokasion
Ti 72 KB a bilang ket espesipiko iti ptmalloc2 ti glibc. Dagiti dadduma nga alokador ket mangaramidda kadagiti nadumaduma a panagtagilako, ken ti damo nga allocation overhead ket agdumaduma a maitunos. Ti pannakaawat kadagitoy a panagdumaduma ket napateg no agpili ti allocator para kadagiti aplikasion a sensitibo iti panagaramid.
- jemalloc (inus-usar babaen ti Facebook, FreeBSD) — Agus-usar ti ad-adu a granular nga estruktura ti arena nga addaan kadagiti thread-local a cache. Ti damo nga overhead ket aggargaraw a nangatngato (masansan a 200+ KB) ngem mangipaay ti nasaysayaat a multi-threaded a panagaramid gapu ti naikkat a panagsusuppiat ti kandado.
- tcmalloc (Ti Thread-Caching Malloc ti Google) — Mangituding ti tunggal-thread a cache iti agarup a 2 MB babaen ti default, nga addaan iti agresibo a nasakbay a panagbingbingay. Ti umuna nga overhead ket nangatngato, ngem dagiti sumaganad a babassit a pannakabingbingay ket napardas unay.
- musl libc's malloc — Agus-usar ti nasimsimple nga amang a disenio a naibatay iti mmap para kadagiti amin a pannakabingbingay. Ti umuna a gastos ket bassit (masansan a 4 KB laeng iti tunggal maysa a pannakabingbingay), ngem ti gastos iti tunggal maysa a pannakabingbingay ket nangatngato gapu kadagiti ad-adu a masansan nga awag ti sistema.
- mimalloc (Microsoft) — Agus-usar ti segment-based a panagbingbingay nga addaan kadagiti 64 MB a paset. Ti umuna a pannakabingbingay ket mangtignay ti 64 MB a birtual a reserbasion (nga addaan iti bassit a pisikal a panagkumit), ti espasio ti adres ti panagtagilako para iti naisangayan a lokalidad ken throughput.
Ti panagpili iti nagbaetan dagitoy nga allokator ket agpannuray nga interamente iti karga ti trabahom. Para kadagiti napaut nga aplikasion ti serbidor nga addaan iti nadagsen a multi-threaded a panagbingbingay, ti jemalloc wenno tcmalloc ket kadawyan a nalablabes ngem ti default ti glibc. Para kadagiti memoria-a-natengngel a naikabil a sistema, ti nasimsimple a pamay-an ti musl ket mabalin a nasaysayaat iti laksid ti nababbaba a throughput. Para kadagiti kaaduan a sapasap-a-panggep nga aplikasion ti desktop ken serbidor, ti 72 KB nga umuna nga overhead ti ptmalloc2 ket mangibagi ti nainkalintegan a default nga agtrabaho a nasayaat nga awan ti panagtuno.
Panangituno ti Umuna a Kababalin ti Panagbingbingay
No ti default a 72 KB nga umuna nga overhead ket pudno a problemado para iti kaso ti panagusarmo — nalabit nga ag-spawning ka kadagiti rinibu nga ababa ti panagbiagna a proseso, tunggal maysa ket mangaramid laeng kadagiti sumagmamano a pannakabingbingay — ti glibc ket mangipaay kadagiti sumagmamano a tunable babaen ti mallopt() ken ti MALLOC_ a pamilia dagiti variable ti aglawlaw.
Ti parametro ti M_TOP_PAD ket mangkontrol no kasano kaadu ti ekstra a memoria ti kiddaw ti allocator iti labes ti dagus a kasapulan. Ti panangisaad iti daytoy iti 0 babaen ti mallopt(M_TOP_PAD, 0) ket mangibaga iti allokator a dumawat laeng iti kasapulan, a mangkissay iti rugi nga overhead iti dakkel. Ti parametro ti M_MMAP_THRESHOLD ket mangkontrol ti kadakkel iti ngato a dagiti panagbingbingay ket agus-usar ti mmap imbes a ti arena. Ti M_TRIM_THRESHOLD ket mangkontrol no ti nawaya a memoria ket maisubli iti OS. Ket manipud idi glibc 2.26, dagiti glibc.malloc.tcache_count ken glibc.malloc.tcache_max a tunable ket palubosannaka a mangkontrol ti kababalin ti thread cache.
Nupay kasta, maysa a sao ti panagannad: ti panangituno kadagitoy a parametro nga awan ti naannad a panagbenchmark ket gistay kanayon a mangpakaro kadagiti bambanag. Dagiti default ket napili a naibatay iti nasaknap a pudno a lubong a panagpropil, ken dagitoy ket mangibagi ti nasam-it a lugar para iti dakkel a kaaduan kadagiti karga ti trabaho. Malaksid no addaanka iti napigsa nga ebidensia manipud iti production profiling a ti malloc overhead ket maysa a bottleneck — ken narukodmo ti epekto dagiti panagbalbaliwmo — bay-am laeng dagiti default. Ti nasapa a panagoptimisar ti allocator ket maysa a partikular a nasikap a porma ti panagbarbas ti yak a nangbusbos kadagiti di mabilang nga oras ti inhenieria para iti saan unay a pagimbagan.
No Ania ti Isuro Daytoy Kadatayo Maipapan iti Panagprograma ti Sistema
Ti 72 KB nga umuna-a-panagbingbingay a misterio ket, iti tengnga daytoy, maysa a leksion maipapan kadagiti abstraction layers. Ti C++ ket mangted kenka ti ilusion a ti baro nga int ket mangituding ti 4 a byte. Kasta ti kuna ti pagalagadan ti pagsasao. Kasta ti kuna ti mental model-mo. Ngem iti nagbaetan ti kodigom ken ti hardware ket agtugaw ti maysa a bunton dagiti sopistikado a sistema — ti oras ti panagtaray ti C++, ti C library allocator, ti birtual a subsistema ti memoria ti kernel, ken ti MMU ken TLB ti hardware — tunggal maysa ket manginayon kadagiti bukodna a kababalin, panagoptimisar, ken overhead.
Saan a pagkurangan daytoy. Dayta ti intero a punto ti systems software. Tunggal sapasap ket adda tapno mangrisut ti pudno a parikut: adda ti allokator isu a saanmo a kasapulan ti agaramid kadagiti panagayab ti sistema para iti tunggal maysa a panagbingbingay. Adda ti birtual a sistema ti memoria isu a saanmo a kasapulan a direkta nga imanehar ti pisikal a memoria. Adda ti page fault handler isu a ti memoria ket naikumit a natangken ken episiente. Tunggal suson ket agtagilako ti bassit a kaadu ti kinalawag para iti dakkel a kaadu ti panagaramid ken kombeniente.
Dagiti agparparang-ay a mangbangon kadagiti kaaduan a mapagtalkan, kangatuan ti panagaramidna a sistema ket dagidiay makaawat kadagitoy a sapasap — saan a gapu ta kasapulanda a panunoten dagitoy a kanayon, ngem gapu ta no adda banag a di ninamnama a mapasamak (kas ti misterioso a 72 KB a pannakabingbingay), addaanda iti mental a modelo tapno maawatan no apay. Mangbangbangonka man iti aktual nga oras a sistema ti panagtagilako, makina ti ay-ayam, wenno plataporma ti negosio a mangserserbi kadagiti rinibu nga agus-usar, ti abilidad a mangrason maipapan iti aktual nga ar-aramiden ti kodigom iti lebel ti sistema ket isu ti mangisina kadagiti makabael a developer manipud kadagiti naisangsangayan. Ti 72 KB ket saan a bug. Dayta ti allocator-mo nga agar-aramid iti trabahona a naraniag.
Ibangon ti OS ti Negosyom Ita nga aldaw
Manipud kadagiti freelancer aginggana kadagiti ahensia, ti Mewayz ket mangpabileg kadagiti 138,000+ a negosio nga addaan kadagiti 207 a naikaykaysa a modulo. Mangrugika a libre, ag-upgrade inton dumakkelka.
Mangaramid ti Libre nga Kuenta →Try Mewayz Free
All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.
Get more articles like this
Weekly business tips and product updates. Free forever.
You're subscribed!
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 →Related articles
Hacker News
Show HN: Spice simulation → oscilloscope → verification with Claude Code
Apr 17, 2026
Hacker News
Hospital at centre of child HIV outbreak caught reusing syringes in Pakistan
Apr 16, 2026
Hacker News
George Orwell Predicted the Rise of "AI Slop" in Nineteen Eighty-Four (1949)
Apr 16, 2026
Hacker News
Everything we like is a psyop
Apr 16, 2026
Hacker News
U.S. to Create High-Tech Manufacturing Zone in Philippines
Apr 16, 2026
Hacker News
New unsealed records reveal Amazon's price-fixing tactics, California AG claims
Apr 16, 2026
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