Poukisa premye C++ (m) alokasyon an toujou 72 KB?
Kòmantè
Mewayz Team
Editorial Team
Mistè ki dèyè premye alokasyon C++ ou a
Ou ekri yon senp pwogram C++. Yon sèl nouvo int. Kat byte. Ou tire moute straceoswa profiler memwa pi renmen ou, epi gen li - pwosesis ou jis mande apeprè 72 KB nan sistèm nan fonksyone. Pa 4 octets. Pa 64 bytes. Yon plen 72 KB. Si ou te janm gade nimewo sa a epi mande si zouti ou a te bay manti, ou pa poukont ou. Konpòtman ki sanble ra sa a se youn nan kesyon ki pi souvan poze pami devlopè C++ ki fouye nan entèn memwa pou premye fwa, epi repons lan mennen nou nan yon vwayaj kaptivan atravè kouch ki chita ant kòd ou a ak pyès ki nan konpitè aktyèl la.
Kisa ki rive lè w rele nouvo
Pou konprann figi a 72 KB, ou bezwen trase chèn alokasyon konplè a. Lè kòd C++ ou a egzekite nouvo int, konpilatè a tradui sa nan yon apèl bay operatè nouvo, ki sou pifò sistèm Linux delege mallocsoti nan glibc. Men,mallocpa mande dirèkteman nwayo a pou 4 octets memwa. Kernel la opere nan paj - anjeneral 4 KB sou x86_64 - ak pri a nan yon apèl sistèm se menmen parapò ak yon aksè memwa senp. Lè w rele brk()oswa mmap()pou chak alokasyon endividyèl ta fè nenpòt pwogram ki pa trivial sispann.
Okontrè, alokasyon memwa glibc a — yon aplikasyon ki rele ptmalloc2, li menm ki soti nan klasik dlmalloc Doug Lea a — aji kòm yon entèmedyè. Li mande gwo blòk memwa soti nan nwayo a davans, Lè sa a, skilte yo an pi piti moso kòm pwogram ou a bezwen yo. Sa a se rezon fondamantal premye alokasyon 4-octet ou a deklanche yon demann pi gwo nan sistèm operasyon an. Alokatè a pa fè gaspiyaj. Li se estratejik.
Diseksyon 72 KB a: Ki kote byte yo ale
Inisyal alokasyon anlè a soti nan plizyè eleman diferan ke ègzekutabl la dwe inisyalize anvan li ka remèt ou menm yon sèl byte nan memwa ki ka itilize. Konprann chak eleman eksplike poukisa nimewo a ateri kote li rive.
Premyèman, glibc's malloc inisyalize tèren prensipal la — estrikti kontablite prensipal la ki swiv tout alokasyon sou fil prensipal la. Tèren sa a gen ladan metadata pou pil la, endikasyon gratis-lis, ak estrikti bin pou diferan gwosè alokasyon. Alokatè a pwolonje repo pwogram nan atravè sbrk(), epi premye ekstansyon an gouvène pa yon paramèt entèn ki rele M_TOP_PAD, ki pa default nan 128 KB nan padding. Sepandan, demann inisyal aktyèl la ajiste pou aliyman paj ak pozisyon repo ki egziste deja, sa ki souvan lakòz yon premye demann ki pi piti — souvan ateri toupre figi 72 KB sa a sou yon pwosesis ki fèk kòmanse.
Dezyèmman, depi glibc 2.26, alokatè a inisyalize yon kachèt fil lokal (tcache) sou premye itilizasyon. Tcache a gen 64 emplacements (youn pou chak klas ti alokasyon gwosè), yo chak kapab kenbe jiska 7 moso kachèt. tcache_perthread_structli menm konsome anviwon 1 KB, men zak inisyalize li deklanche konfigirasyon tèren an pi laj. Twazyèmman, ègzekutabl C++ a te deja fè alokasyon anvan main()ou a menm kouri — konstrukteur estatik, inisyalizasyon tanpon iostream pou std::coutak zanmi, ak konfigirasyon lokal yo tout kontribye nan anprint premye pil pil sa a.
Sistèm Arena a ak poukisa alokasyon avan se entelijan
Desizyon pou pre-allocation yon gwo moso nan memwa olye ke mande li pa moso se pa yon aksidan nan aplikasyon an. Li se yon konpwomi jeni ekspre rasin nan dè dekad eksperyans nan pwogramasyon sistèm yo. Chak apèl nan brk()oswa mmap() enplike yon chanjman kontèks soti nan espas itilizatè a nan espas nwayo, modifikasyon nan kat memwa vityèl pwosesis la, ak potansyèl mizajou tablo paj la. Sou pyès ki nan konpitè modèn, yon sèl apèl sistèm koute apeprè 100-200 nanosegond - trivial nan izolasyon, katastwofik nan echèl.
Konsidere yon pwogram ki fè 10,000 ti alokasyon pandan inisyalizasyon. San yo pa pre-alokasyon, sa ta vle di 10,000 apèl sistèm, koute apeprè 1-2 milisgond nan tèt pi bon kalite. Avèk yon alokasyon ki baze sou tèren, premye alokasyon an deklannche yon sèl apèl sistèm, epi 9,999 alokasyon ki vin apre yo resevwa sèvis antyèman nan espas itilizatè atravè aritmetik pwentè ak operasyon ki lye-lis - chak pran apeprè 10-50 nanosegond. Matematik la pa klè: alokasyon anvan yo ranpòte pa lòd grandè.
72 KB ou wè sou premye alokasyon ou a pa gaspiye memwa - li se yon envestisman pèfòmans. Repartitè a ap parye ke pwogram ou a pral fè plis alokasyon byento, ak nan prèske chak senaryo reyèl, parye sa a byen peye. Pri a nan espas adrès vityèl ki pa itilize se esansyèlman zewo sou sistèm modèn 64-bit.
Memwa vityèl vs memwa fizik: Poukisa li pa enpòtan
Yon enkyetid komen pami devlopè yo rankontre konpòtman sa a pou premye fwa se fatra resous yo. Si mwen sèlman bezwen 4 bytes, poukisa pwogram mwen an konsome 72 KB? Insight kritik la se kememwa vityèl se pa memwa fizik. Lè glibc pwolonje repo pwogram nan pa 72 KB, nwayo a mete ajou kat memwa vityèl pwosesis la, men li pa imedyatman tounen paj sa yo ak RAM fizik. Paj fizik aktyèl yo bay sou demann nan fot paj — sèlman lè pwogram ou a ekri nan yon adrès espesifik ke nwayo a bay li yon paj memwa reyèl.
💡 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 →Sa vle di ke menm si gwosè vityèl pwosesis ou a ogmante pa 72 KB, rezidan seri seri li yo (RSS) - kantite RAM fizik aktyèlman konsome - ogmante pa sèlman paj ou aktyèlman touche yo. Pou yon sèl nouvo int, sa se tipikman yon paj 4 KB, plis kèlkeswa paj metadata tèren an okipe. Espas vityèl ki rete a chita la, pare pou itilize, pa koute anyen men espas adrès - nan ki ou gen 128 TB sou yon sistèm Linux 64-bit.
Distenksyon sa a enpòtan anpil lè profilage ak siveyans aplikasyon pwodiksyon an. Si w ap bati lojisyèl ki bezwen swiv konsomasyon resous reyèl - si se yon backend SaaS, yon mikwosèvis, oswa yon tiyo analiz tankou sa yo ki kouri sou platfòm tankouMewayzpou operasyon biznis - ou ta dwe toujou kontwole RSS olye ke gwosè vityèl. Zouti tankou /proc/[pid]/smaps, valgrind --tool=massif, ak pmap ka ba ou anprent memwa fizik egzat olye ke yo twonpe figi memwa vityèl yo.
Kijan diferan alokasyon yo okipe premye alokasyon an
Figi 72 KB a espesifik pou glibc a ptmalloc2. Lòt alokatè fè konpwomi diferan, ak alokasyon an premye a varye kòmsadwa. Konprann diferans sa yo gen anpil valè lè w ap chwazi yon alokasyon pou aplikasyon ki sansib pou pèfòmans yo.
- jemalloc (itilize pa Facebook, FreeBSD) — Itilize yon estrikti tèren ki pi granulaire ak kachèt lokal yo. Anlè inisyal la gen tandans vin pi wo (souvan plis pase 200 KB) men li bay pi bon pèfòmans milti-threaded akòz deba fèmen a kle.
- tcmalloc (Google's Thread-Caching Malloc) — Bay yon kachèt pou chak fil apeprè 2 MB pa default, ak pre-alokasyon agresif. Premye tèt yo pi wo, men ti alokasyon ki vin apre yo trè vit.
- musl libc's malloc — Itilize yon konsepsyon ki pi senp ki baze sou mmap pou tout alokasyon yo. Inisyal tèt yo minim (souvan jis 4 KB pou chak alokasyon), men pri pou chak alokasyon pi wo akòz apèl sistèm pi souvan.
- mimalloc (Microsoft) — Itilize alokasyon ki baze sou segman ak segman 64 MB. Premye alokasyon an deklannche yon rezèvasyon vityèl 64 MB (avèk angajman fizik minim), espas adrès komès pou lokalite eksepsyonèl ak debi.
Chwa ant alokateur sa yo depann antyèman sou kantite travay ou. Pou aplikasyon pou sèvè ki dire lontan ak alokasyon lou milti-threaded, jemalloc oswa tcmalloc tipikman depase default glibc la. Pou sistèm embedded memwa-contrainte, apwòch ki pi senp musl a ka pi preferab malgre pi ba debi. Pou pifò aplikasyon pou Desktop ak sèvè pou rezon jeneral, ptmalloc2 a 72 KB sou tèt inisyal la reprezante yon default rezonab ki travay byen san ajisteman.
Ajiste Konpòtman Alokasyon Inisyal la
Si defo 72 KB inisyal la se vrèman pwoblèm pou ka itilize w la — petèt w ap anjandre dè milye de pwosesis ki dire lontan, chak fè sèlman yon ti ponyen alokasyon — glibc bay plizyè tunable atravè mallopt() ak MALLOC_ fanmi varyab anviwònman an.
Paramèt M_TOP_PAD la kontwole konbyen memwa siplemantè alokatè a mande plis pase sa ki nesesè imedyatman. Mete li sou 0 ak mallopt(M_TOP_PAD, 0) di allocatè a pou l mande sèlman sa ki nesesè, sa ki diminye sou tèt inisyal la anpil. Paramèt M_MMAP_THRESHOLD kontwole gwosè ki pi wo pase alokasyon yo itilize mmap olye de tèren an. M_TRIM_THRESHOLD kontwole lè yo retounen memwa ki libere nan OS la. Epi depi glibc 2.26, glibc.malloc.tcache_count ak glibc.malloc.tcache_max tunables pèmèt ou kontwole konpòtman kachèt fil la.
Sepandan, yon mo prekosyon: ajiste paramèt sa yo san yo pa pran anpil atansyon benchmarking prèske toujou fè bagay sa yo vin pi mal. Defo yo te chwazi baze sou anpil pwofil mond reyèl la, epi yo reprezante yon plas dous pou vas majorite nan chaj travay yo. Sòf si ou gen prèv solid nan pwofil pwodiksyon ki montre malloc anlè se yon kou boutèy - epi ou te mezire enpak la nan chanjman ou yo - kite default yo pou kont li. Optimizasyon prematire nan alokatè a se yon fòm patikilyèman trètr nan bab Yak ki te boule èdtan jeni inonbrabl pou benefis neglijab.
Kisa sa aprann nou sou pwogramasyon sistèm
Mistè premye alokasyon 72 KB a se, nan nwayo li yo, yon leson sou kouch abstraksyon. C ++ ba ou ilizyon ke nouvo int asiyen 4 bytes. Estanda lang lan di sa. Modèl mantal ou di sa. Men, ant kòd ou a ak pyès ki nan konpitè a chita yon pil nan sistèm sofistike - ègzekutabl C++ a, alokasyon bibliyotèk C la, subsistèm memwa vityèl nwayo a, ak MMU ak TLB pyès ki nan konpitè a - yo chak ajoute pwòp konpòtman, optimize, ak anlè.
Sa a se pa yon defo. Li se tout pwen lojisyèl sistèm yo. Chak kouch egziste pou rezoud yon pwoblèm reyèl: alokasyon an egziste pou ou pa oblije fè apèl sistèm pou chak alokasyon. Sistèm memwa vityèl la egziste pou ou pa oblije jere memwa fizik dirèkteman. Manadjè fay paj la egziste pou memwa komèt parese ak efikasite. Chak kouch echanj yon ti kantite transparans pou yon gwo kantite pèfòmans ak konvenyans.
Devlopè yo ki bati sistèm ki pi serye, ki pi pèfòmans yo se moun ki konprann kouch sa yo - pa paske yo bezwen reflechi sou yo toujou, men paske lè yon bagay inatandi rive (tankou yon alokasyon misterye 72 KB), yo gen modèl mantal pou konprann poukisa. Kit ou ap konstwi yon sistèm komès an tan reyèl, yon motè jwèt, oswa yon platfòm biznis k ap sèvi plizyè milye itilizatè, kapasite pou rezone sou sa kòd ou a aktyèlman fè nan nivo sistèm nan se sa ki separe devlopè konpetan ak devlopè eksepsyonèl. 72 KB a se pa yon ensèk. Se alokatè w la k ap fè travay li briyan.
Bizye eksplwatasyon biznis ou jodi a
Soti nan endependan rive nan ajans, Mewayz pouvwa plis 138,000 biznis ak 207 modil entegre. Kòmanse gratis, ajou lè w grandi.
Kreye kont gratis →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