Ngano nga ang una nga C++ (m) nga alokasyon kanunay nga 72 KB?
Mga komento
Mewayz Team
Editorial Team
Ang Misteryo Likod sa Imong Unang C++ Allocation
Nagsulat ka usa ka yano nga programa sa C++. Usa ka bag-ong int. Upat ka byte. Gipasiga nimo ang straceo ang imong paborito nga profiler sa memorya, ug naa na — ang imong proseso nangayo lang og halos 72 KB gikan sa operating system. Dili 4 bytes. Dili 64 bytes. Usa ka bug-os nga 72 KB. Kung nakatutok ka sa kana nga numero ug naghunahuna kung namakak ba kanimo ang imong tool, wala ka nag-inusara. Kining daw katingad-an nga kinaiya mao ang usa sa labing kanunay nga gipangutana nga mga pangutana sa mga nag-develop sa C++ nga nagkubkob sa mga internal nga memorya sa unang higayon, ug ang tubag nagdala kanato sa usa ka makaiikag nga panaw sa mga lut-od nga anaa sa taliwala sa imong code ug sa aktuwal nga hardware.
Unsay Mahitabo Kung Motawag ka og bag-o
Aron masabtan ang 72 KB nga numero, kinahanglan nimo nga masubay ang tibuok nga kadena sa alokasyon. Sa diha nga ang imong C++ code mopatuman sa new int, ang compiler mohubad niana ngadto sa usa ka tawag ngadto sa operator new, nga sa kadaghanan sa mga sistema sa Linux nagdelegar sa mallocgikan sa glibc. Apan ang mallocdili direktang mangayo sa kernel og 4 bytes sa memorya. Ang kernel naglihok sa mga panid - kasagaran 4 KB sa x86_64 - ug ang gasto sa usa ka tawag sa sistema dako kaayo kalabot sa usa ka yano nga pag-access sa memorya. Ang pagtawag og brk() o mmap() para sa matag indibidwal nga alokasyon makapahunong sa bisan unsang dili-trivial nga programa.
Hinuon, ang glibc's memory allocator — usa ka implementasyon nga gitawag og ptmalloc2, mismo gikan sa klasiko nga dlmalloc ni Doug Lea — naglihok isip middleman. Naghangyo kini og dagkong mga bloke sa memorya gikan sa kernel sa unahan, dayon gikulit kini ngadto sa gagmay nga mga piraso sama sa gikinahanglan sa imong programa. Kini ang sukaranan nga hinungdan nga ang imong una nga 4-byte nga alokasyon nagpahinabog labi ka dako nga hangyo sa operating system. Ang tigtagana wala mag-usik-usik. Kini mao ang estratehiko.
Pag-dissect sa 72 KB: Asa Moadto ang Bytes
Ang inisyal nga alokasyon nga overhead nagagikan sa pipila ka lahi nga mga sangkap nga ang runtime kinahanglang magsugod sa dili pa kini makahatag kanimo bisan usa ka byte sa magamit nga memorya. Ang pagsabot sa matag component nagpatin-aw ngano nga ang gidaghanon midangat kung asa kini.
Una, ang glibc's malloc nag-initialize sa main arena — ang nag-unang bookkeeping structure nga nagsubay sa tanang alokasyon sa main thread. Kini nga arena naglakip sa metadata para sa heap, free-list pointer, ug bin structures alang sa lain-laing gidak-on sa alokasyon. Ang allocator nagpalugway sa program break pinaagi sa sbrk(), ug ang inisyal nga extension gidumala sa internal nga parameter nga gitawag og M_TOP_PAD, nga nag-default sa 128 KB nga padding. Apan, ang aktuwal nga inisyal nga hangyo gi-adjust para sa page alignment ug kasamtangan nga break position, nga kasagaran moresulta sa mas gamay nga unang hangyo — kasagaran motugpa duol nianang 72 KB nga numero sa bag-ong gisugdan nga proseso.
Ikaduha, sukad sa glibc 2.26, ang allocator nagpasiugda ug thread-local cache (tcache) sa unang paggamit. Ang tcache adunay 64 ka bins (usa kada gamay nga alokasyon nga klase sa gidak-on), ang matag usa makahimo sa paghawid hangtod sa 7 ka naka-cache nga mga tipak. Ang tcache_perthread_struct mismo mokonsumo ug mga 1 KB, apan ang buhat sa pag-initialize niini magpalihok sa mas lapad nga arena setup. Ikatulo, ang C++ runtime nakahimo na og mga alokasyon sa wala pa ang imong main() bisan pa modagan — static constructors, iostream buffer initialization para sa std::coutug mga higala, ug locale setup ang tanan nakatampo nianang inisyal nga heap footprint.
Ang Sistema sa Arena ug Nganong Maalamon ang Pre-Allocation
Ang desisyon sa pag-allocate daan ug dakong tipik sa panumduman kay sa paghangyo niini nga tinagmay dili aksidente sa pagpatuman. Kini usa ka tinuyo nga tradeoff sa engineering nga nakagamot sa mga dekada nga kasinatian sa programming sa sistema. Ang matag tawag sa brk() o mmap() naglangkit ug konteksto nga switch gikan sa user space ngadto sa kernel space, kausaban sa proseso sa virtual memory mappings, ug potensyal nga page table updates. Sa modernong hardware, ang usa ka tawag sa sistema nagkantidad ug halos 100-200 ka nanoseconds — walay hinungdan sa pag-inusara, katalagman sa sukod.
Ikonsiderar ang usa ka programa nga naghimo og 10,000 ka gagmay nga alokasyon atol sa pagsugod. Kung walay pre-allocation, kana magpasabot ug 10,000 ka system call, nga nagkantidad ug gibana-bana nga 1-2 milliseconds nga puro overhead. Uban sa usa ka arena-based allocator, ang unang alokasyon nagpalihok sa usa ka sistema nga tawag, ug ang misunod nga 9,999 ka alokasyon giserbisyuhan sa bug-os sa user space pinaagi sa pointer arithmetic ug linked-list nga mga operasyon - ang matag usa mokuha ug halos 10-50 nanoseconds. Ang math dili klaro: ang pre-allocation modaog pinaagi sa orders of magnitude.
Ang 72 KB nga imong nakita sa imong unang alokasyon dili nausik nga memorya — kini usa ka puhunan sa performance. Ang allocator nagpusta nga ang imong programa maghimo ug dugang nga mga alokasyon sa dili madugay, ug sa halos matag real-world nga senaryo, kana nga pusta nagbayad og maayo. Ang gasto sa wala magamit nga virtual address space kay zero sa modernong 64-bit system.
Virtual Memory vs. Pisikal nga Memorya: Nganong Dili Kini Importante
Usa ka kasagarang gikabalak-an sa mga developer nga nakasugat niini nga kinaiya sa unang higayon mao ang basura sa kahinguhaan. Kung kinahanglan ra nako ang 4 bytes, ngano nga ang akong programa naggamit sa 72 KB? Ang kritikal nga pagsabot mao ngaang virtual nga panumduman dili pisikal nga panumduman. Kung gipalugwayan sa glibc ang break sa programa sa 72 KB, gi-update sa kernel ang mga virtual memory mapping sa proseso, apan dili dayon ibalik ang mga panid nga adunay pisikal nga RAM. Ang aktuwal nga pisikal nga mga panid gigahin kon gikinahanglan pinaagi sa mga sayop sa panid — lamang sa diha nga ang imong programa magsulat ngadto sa usa ka piho nga adres nga ang kernel mag-assign ug tinuod nga panid sa memorya niini.
💡 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 →Nagpasabot kini nga bisan og ang virtual nga gidak-on sa imong proseso mosaka ug 72 KB, ang resident set size (RSS) — ang gidaghanon sa pisikal nga RAM nga gigamit — motaas sa mga panid nga aktuwal nimong gihikap. Alang sa usa ka bag-ong int, kana kasagaran usa ka panid nga 4 KB, dugang sa bisan unsang mga panid nga giokupar sa metadata sa arena. Ang nahabilin nga virtual space naglingkod didto, andam na alang sa paggamit, wala’y gasto gawas sa address space — diin ikaw adunay 128 TB sa usa ka 64-bit nga sistema sa Linux.
Kini nga kalainan hinungdanon kung ang pag-profile ug pag-monitor sa mga aplikasyon sa produksiyon. Kung nagtukod ka og software nga kinahanglan nga masubay ang tinuod nga konsumo sa kapanguhaan - bisan kung kini usa ka backend sa SaaS, usa ka microservice, o usa ka pipeline sa analytics sama sa mga nagdagan sa mga platform sama sa Mewayzpara sa mga operasyon sa negosyo - kinahanglan nimo kanunay nga bantayan ang RSS kaysa sa virtual nga gidak-on. Ang mga himan sama sa /proc/[pid]/smaps, valgrind --tool=massif, ug pmap makahatag kanimo og tukma nga physical memory footprints kay sa makapahisalaag nga virtual memory figures.
Giunsa sa Nagkalainlain nga mga Allocation ang Pagdumala sa Unang Allocation
Ang 72 KB nga numero espesipiko sa ptmalloc2 sa glibc. Ang ubang mga alokador naghimo ug lain-laing mga tradeoff, ug ang inisyal nga alokasyon nga overhead magkalahi sumala niana. Ang pagsabot niini nga mga kalainan kay bililhon sa pagpili sa usa ka tigtagana alang sa performance-sensitive nga mga aplikasyon.
- jemalloc (gigamit sa Facebook, FreeBSD) — Naggamit ug mas granular nga istruktura sa arena nga adunay thread-local caches. Ang inisyal nga overhead lagmit nga mas taas (kasagaran 200+ KB) apan naghatag ug mas maayo nga multi-threaded nga performance tungod sa pagkunhod sa lock contention.
- tcmalloc (Google's Thread-Caching Malloc) — Naggahin ug per-thread cache nga gibana-bana nga 2 MB sa default, nga adunay agresibo nga pre-allocation. Ang inisyal nga overhead mas taas, apan ang mosunod nga gagmay nga mga alokasyon paspas kaayo.
- musl libc's malloc — Nagagamit ug mas simple nga disenyo base sa mmap para sa tanang alokasyon. Gamay ra ang inisyal nga overhead (kasagaran 4 KB lang kada alokasyon), pero mas taas ang gasto sa kada alokasyon tungod sa mas subsob nga mga tawag sa sistema.
- mimalloc (Microsoft) — Naggamit og segment-based nga alokasyon nga adunay 64 MB nga mga bahin. Ang una nga alokasyon nag-aghat sa usa ka 64 MB nga virtual nga reserbasyon (nga adunay gamay nga pisikal nga pasalig), lugar sa address sa pamatigayon alang sa talagsaon nga lokalidad ug throughput.
Ang pagpili tali niining mga tigtagana nagdepende sa bug-os sa imong workload. Para sa dugay na nga mga aplikasyon sa server nga adunay bug-at nga multi-threaded nga alokasyon, ang jemalloc o tcmalloc kasagarang molapas sa default sa glibc. Para sa memory-constrained embedded system, ang mas simple nga pamaagi sa musl mahimong mas maayo bisan pa sa ubos nga throughput. Alang sa kadaghanan nga mga aplikasyon sa desktop ug server sa kinatibuk-ang katuyoan, ang 72 KB nga inisyal nga overhead sa ptmalloc2 nagrepresentar sa usa ka makatarunganon nga default nga molihok nga maayo nga wala’y pag-tune.
Pag-tune sa Initial Allocation Behavior
Kung ang default nga 72 KB nga inisyal nga overhead tinuod nga problema alang sa imong kaso sa paggamit — tingali nagpatungha ka og liboan ka mga mubu nga proseso, ang matag usa naghimo lamang og pipila nga mga alokasyon — ang glibc naghatag daghang mga tunables pinaagi sa mallopt() ug ang MALLOC_ pamilya sa mga variable sa palibot.
Ang M_TOP_PAD nga parametro nagkontrolar kon pila ka dugang nga panumduman ang gipangayo sa tigtagana lapas sa gikinahanglan dayon. Ang pagbutang niini ngadto sa 0 nga adunay mallopt(M_TOP_PAD, 0)nagsulti sa tigtagana sa paghangyo lamang sa gikinahanglan, nga makapakunhod pag-ayo sa inisyal nga overhead. Ang parameter nga M_MMAP_THRESHOLD nagkontrol sa gidak-on sa ibabaw diin gigamit sa mga alokasyon ang mmap imbes sa arena. Ang M_TRIM_THRESHOLD nagkontrol kung ang napagawas nga memorya ibalik sa OS. Ug sukad sa glibc 2.26, ang glibc.malloc.tcache_countug glibc.malloc.tcache_max tunables nagtugot kanimo sa pagkontrolar sa thread cache nga kinaiya.
Apan, usa ka pulong sa pasidaan: ang pag-tune niini nga mga parametro nga walay mabinantayon nga pag-benchmark hapit kanunay makapasamot sa mga butang. Ang mga default gipili base sa halapad nga real-world profiling, ug kini nagrepresentar sa usa ka matam-is nga lugar alang sa kadaghanan sa mga workloads. Gawas kung ikaw adunay lig-on nga ebidensya gikan sa pagprofile sa produksiyon nga ang malloc overhead usa ka bottleneck - ug imong gisukod ang epekto sa imong mga pagbag-o - ibilin ang mga default nga mag-inusara. Ang ahat nga pag-optimize sa allocator usa ka partikular nga maliputon nga porma sa pagpamalbas sa yak nga nakakonsumo sa dili maihap nga mga oras sa engineering alang sa gamay nga kaayohan.
Unsa Kini ang Gitudlo Kanato Bahin sa System Programming
Ang 72 KB nga unang-allokasyon nga misteryo kay, sa kinauyokan niini, usa ka leksyon mahitungod sa abstraction layers. Ang C++ naghatag kanimo og ilusyon nga bag-ong intnaggahin ug 4 ka byte. Ang sukaranan sa pinulongan nag-ingon niana. Ang imong mental model nag-ingon niana. Apan tali sa imong code ug sa hardware adunay usa ka stack sa sopistikado nga mga sistema — ang C++ runtime, ang C library allocator, ang kernel's virtual memory subsystem, ug ang hardware sa MMU ug TLB — ang matag usa nagdugang sa iyang kaugalingon nga kinaiya, optimization, ug overhead.
Dili kini depekto. Kini ang tibuuk nga punto sa software sa sistema. Ang matag layer anaa aron sa pagsulbad sa usa ka tinuod nga problema: ang allocator anaa aron dili ka kinahanglan nga maghimo sa mga tawag sa sistema alang sa matag alokasyon. Ang virtual nga sistema sa panumduman anaa aron dili nimo kinahanglan nga direktang pagdumala sa pisikal nga panumduman. Ang tagdumala sa sayup sa panid naglungtad aron ang memorya nahimo nga tapulan ug episyente. Ang matag layer nagbaligya og gamay nga kantidad sa transparency alang sa dako nga kantidad sa performance ug kasayon.
Ang mga developers nga nagtukod sa labing kasaligan, pinakataas nga performance nga mga sistema mao kadtong nakasabut niini nga mga layer — dili tungod kay kinahanglan nila nga hunahunaon kini kanunay, apan tungod kay kung adunay mahitabo nga wala damha (sama sa usa ka misteryosong 72 KB nga alokasyon), sila adunay modelo sa pangisip aron masabtan kung ngano. Kung nagtukod ka usa ka real-time nga sistema sa pamatigayon, usa ka makina sa dula, o usa ka plataporma sa negosyo nga nagserbisyo sa libu-libo nga mga tiggamit, ang katakus sa pagpangatarungan bahin sa kung unsa ang aktuwal nga nahimo sa imong code sa lebel sa sistema mao ang nagbulag sa mga takos nga mga developer gikan sa mga talagsaon. Ang 72 KB dili bug. Kini ang imong tigtagana nga nagbuhat sa iyang trabaho nga maayo kaayo.
Pagtukod sa Imong Negosyo OS Karon
Gikan sa mga freelancer hangtod sa mga ahensya, ang Mewayz adunay gahum sa 138,000+ ka negosyo nga adunay 207 ka integrated modules. Pagsugod nga libre, pag-upgrade kung modako ka.
Paghimo ug Libre nga Account →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
Bluesky has been dealing with a DDoS attack for nearly a full day
Apr 17, 2026
Hacker News
Human Accelerated Region 1
Apr 17, 2026
Hacker News
Discourse Is Not Going Closed Source
Apr 17, 2026
Hacker News
Substrate AI Is Hiring Harness Engineers
Apr 17, 2026
Hacker News
US Bill Mandates On-Device Age Verification
Apr 17, 2026
Hacker News
Show HN: SPICE simulation → oscilloscope → verification with Claude Code
Apr 17, 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