Adɛn nti na C++ (m)allocation a edi kan no yɛ 72 KB bere nyinaa?
Nsɛm a wɔka
Mewayz Team
Editorial Team
Ahintasɛm a Ɛwɔ Wo C++ Nkyekyɛmu a Edi Kan no Akyi
Wo kyerɛw C++ program a ɛnyɛ den. int foforo biako. Bait anan na ɛwɔ hɔ. Woto gya strace anaa wo memory profiler a w’ani gye ho, na ɛhɔ na ɛwɔ — wo dwumadie no bisaa bɛyɛ 72 KB kɛkɛ afiri dwumadie nhyehyɛeɛ no mu. Ɛnyɛ baiti 4. Ɛnyɛ baiti 64. A ne nyinaa yɛ 72 KB. Sɛ woahwɛ saa nɔma no anibere so pɛn na woasusuw ho sɛ ebia na wo nnwinnade no redi atoro akyerɛ wo a, ɛnyɛ wo nkutoo na wowɔ. Saa suban a ɛte sɛ nea ɛyɛ nwonwa yi yɛ nsɛmmisa a wɔtaa bisa wɔ C++ developers a wɔretutu memory internals mu nea edi kan no mu biako, na mmuae no de yɛn kɔ akwantu a ɛyɛ anigye mu fa layers a ɛte wo code ne hardware ankasa ntam no mu.
Nea Ɛba Bere a Wofrɛ foforo
Sɛ wopɛ sɛ wote 72 KB akontabuo no ase a, ɛsɛ sɛ wohwehwɛ nkyekyɛmu nkɔnsɔnkɔnsɔn no nyinaa akyi. Sɛ wo C++ koodu no yɛ new int a, compiler no kyerɛ saa ase kɔ frɛ a ɛkɔ operator new, a wɔ Linux nhyehyɛe dodow no ara so no ɛde malloc fi glibc. Nanso malloc nbisa kernel no tẽẽ sɛ ɔmma no memory baiti 4. Kernel no yɛ adwuma wɔ nkratafa mu — mpɛn pii no 4 KB wɔ x86_64 — na ɛka a wɔbɔ wɔ nhyehyɛe frɛ ho no yɛ kɛse bere a wɔde toto memory a ɛnyɛ den ho. Sɛ wofrɛ brk() anaa mmap() ma ankorankoro nkyekyɛmu biara a, ɛbɛma dwumadie biara a ɛnyɛ ade ketewa no ayɛ grind akɔ agyae.
Mmom, glibc memory allocator — dwumadie a wɔfrɛ no ptmalloc2, a n’ankasa firi Doug Lea classic dlmalloc — yɛ adwuma sɛ mfimfini. Ɛbisa memory blocks akɛseɛ fi kernel no mu ansa na ɛreba, afei ɛdi no nketenkete sɛdeɛ wo program no hia no. Eyi ne ade titiriw nti a wo 4-byte nkyekyɛmu a edi kan no kanyan abisade kɛse bi a ɛkɔ operating system no so. Ɛnyɛ nea ɔkyekyɛ nneɛma mu no reyɛ adesɛe. Ɛyɛ sɛ wobɛyɛ ɔkwan a wɔfa so yɛ adwuma.
72 KB no a wɔbɛkyekyɛ mu: Baabi a Bytes no Kɔ
Mfitiaseɛ kyɛfa a ɛwɔ soro no firi nneɛma ahodoɔ pii a ɛsɛ sɛ runtime no hyɛ aseɛ ansa na atumi de baiti baako mpo a ɛyɛ memory a wobɛtumi de adi dwuma ama wo. Sɛ yɛte ɔfa biara ase a, ɛkyerɛkyerɛ nea enti a akontaahyɛde no si fam wɔ baabi a ɛkɔ.
Nea edi kan no, glibc malloc no hyɛ main arena ase — nhomakorabea nhyehyɛe titiriw a ɛdi nkyekyɛmu nyinaa akyi wɔ asaawa titiriw no so. Saa arena yi ka metadata ma heap, free-list pointers, ne bin structures ma allocation akɛseɛ ahodoɔ. Allocator no trɛw program break no mu denam sbrk() so, na mfitiaseɛ ntrɛmu no, emu parameter bi a wɔfrɛ no M_TOP_PAD na ɛdi so, a ɛyɛ default sɛ 128 KB padding. Nanso, wɔayɛ nsakraeɛ wɔ mfitiaseɛ abisadeɛ ankasa no mu ama kratafa a ɛne ne ho hyia ne ahomegyeɛ gyinabea a ɛwɔ hɔ dada, a ɛtaa de abisadeɛ a ɛdi kan ketewa bi ba — ɛtaa si fam bɛn saa 72 KB akontabuo no wɔ dwumadie a wɔafi aseɛ foforɔ so.
Nea ɛtɔ so mmienu, ɛfiri sɛ glibc 2.26, ɔkyekyɛfoɔ no hyɛ aseɛ thread-local cache (tcache) wɔ dwumadie a ɛdi kan no mu. Tcache no kura bins 64 (baako wɔ small-allocation size class biara mu), a emu biara tumi kura cached chunks 7. tcache_perthread_struct no ankasa di bɛyɛ 1 KB, nanso adeyɛ a ɛde fi ase no kanyan arena nhyehyɛe a ɛtrɛw no. Nea ɛtɔ so mmiɛnsa, C++ runtime no ayɛ nkyekyɛmu dedaw ansa na wo main() no mpo atu mmirika — static constructors, iostream buffer initialization ma std::cout ne nnamfo, ne locale nhyehyeɛ nyinaa boa ma saa mfitiaseɛ heap footprint no ba.
Arena Nhyehyɛe ne Nea Enti a Pre-Allocation yɛ Nyansa
Gyinaesi a wosii sɛ wobedi kan akyekyɛ nkae kɛse bi sen sɛ wobɛsrɛ no asinasin no nyɛ akwanhyia a ɛbae wɔ dwumadie mu. Ɛyɛ mfiridwuma mu aguadi a wɔahyɛ da ayɛ a egyina mfe du du pii a wɔanya wɔ nhyehyɛe ahorow ho nhyehyɛe mu osuahu so. Ɔfrɛ biara a ɛkɔ brk() anaa mmap() no fa nsɛm a ɛfa ho nsakraeɛ firi ɔdefoɔ atenaeɛ kɔ kernel atenaeɛ, nsakraeɛ a ɛwɔ dwumadie no virtual memory mappings mu, ne krataafa pon foforɔ a ɛbɛtumi aba. Wɔ nnɛyi hardware so no, nhyehyɛe biako frɛ bo bɛyɛ nanoseconds 100-200 — ɛnyɛ hwee wɔ baabi a ɛtew, asiane kɛse wɔ ne kɛse mu.
Susuw dwumadie bi a ɛyɛ nkyekyɛmu nketewa 10,000 wɔ mfitiaseɛ berɛ mu. Sɛ wɔankyekyɛ ansa na wɔakyekyɛ a, ɛno bɛkyerɛ sɛ wɔbɛfrɛ nhyehyɛe no frɛ 10,000, a ɛho ka bɛyɛ milisekɔn 1-2 wɔ sika a ɛho tew a wɔde tua ho ka. Sɛ wɔde arena-based allocator di dwuma a, kyɛfa a edi kan no kanyan nhyehyɛe frɛ biako, na wɔsom kyɛfa 9,999 a edi hɔ no nyinaa wɔ ɔdefo ahunmu denam pointer akontaabu ne linked-list adwumayɛ so — emu biara gye bɛyɛ 10-50 nanoseconds. Nkontaabu no mu nna hɔ: pre-allocation di nkonim denam orders of magnitude so.
a wɔde ahyɛ muna ɛkyerɛ sɛ woayɛ72 KB a wuhu wɔ wo nkyekyɛmu a edi kan no so no nyɛ memory a wɔsɛe no — ɛyɛ adwumayɛ mu sika a wode bɛto mu. Nea ɔkyekyɛ kyakya no reto kyakya sɛ wo dwumadi no bɛma wɔakyekyɛ nneɛma pii nnansa yi ara, na ɛkame ayɛ sɛ wɔ wiase ankasa tebea biara mu no, saa kyakyatow no tua ka fɛfɛɛfɛ. Virtual address space a wɔmfa nni dwuma ho ka yɛ zero titiriw wɔ nnɛyi 64-bit nhyehyɛe ahorow so.
Virtual Memory vs. Physical Memory: Nea enti a Ɛho Nhia
Adeɛ a ɛtaa haw developers a wɔhyia saa suban yi nea ɛdi kan ne nneɛma a wɔsɛe no. Sɛ me hia bytes 4 pɛ a, adɛn nti na me program no redi 72 KB? Nhumu a ɛho hia ne sɛ virtual memory nyɛ honam fam nkae. Sɛ glibc trɛw program break no mu 72 KB a, kernel no yɛ process no virtual memory mappings no foforo, nanso ɛnfa honam fam RAM mfa saa nkratafa no akyi ntɛm ara. Wɔkyekyɛ honam fam nkratafa ankasa no sɛnea wɔhwehwɛ denam kratafa mfomso so — bere a wo dwumadi no kyerɛw kɔ address pɔtee bi so nkutoo na kernel no de nkae krataafa ankasa ma no.
💡 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 →Eyi kyerɛ sɛ ɛwom sɛ wo dwumadie no virtual kɛseɛ kɔ soro 72 KB deɛ, nanso ne resident set size (RSS) — honam fam RAM dodoɔ a wɔde di dwuma ankasa — kɔ soro wɔ nkratafa a woka ankasa no nko ara. Wɔ int foforo biako ho no, ɛno taa yɛ 4 KB krataafa biako, ne kratafa biara a arena metadata no gye. Virtual space a aka no te hɔ, ayɛ krado sɛ wɔde bedi dwuma, ɛho ka nyɛ hwee gye address space — a emu 128 wɔ TB wɔ 64-bit Linux system so.
Saa nsonsonoeɛ yi ho hia berɛ a wɔreyɛ profiling na wɔrehwɛ production applications so. Sɛ worekyekye softwea a ɛhia sɛ wodi nneɛma a wɔde di dwuma ankasa akyi — sɛ ɛyɛ SaaS akyi, microservice, anaa analytics pipeline te sɛ wɔn a ɛkɔ so wɔ platform te sɛ Mewayz so ma adwumayɛ adwumayɛ — ɛsɛ sɛ wohwɛ RSS so bere nyinaa sen sɛ wobɛhwɛ virtual size. Nnwinnade te sɛ /proc/[pid]/smaps, valgrind --tool=massif, ne pmap betumi ama wo honam fam nkaeɛ anammɔn a ɛyɛ pɛpɛɛpɛ sene sɛ ɛbɛdaadaa virtual memory akontabuo.
Sɛnea Nkyekyɛmu Ahorow Di Nkyekyɛmu a Edi Kan no Ho dwuma
72 KB akontabuo no yɛ glibc ptmalloc2 pɔtee. Afoforo a wɔkyekyɛ nneɛma no yɛ aguadi ahorow, na sika a wɔkyekyɛ mfiase no gu ahorow sɛnea ɛfata. Saa nsonsonoeɛ yi nteaseɛ ho hia berɛ a worepaw kyɛfa ama dwumadie a ɛfa adwumayɛ ho.
- jemalloc (Facebook, FreeBSD na ɛde di dwuma) — Ɛde arena nhyehyɛe a ɛyɛ granular kɛse a ɛwɔ thread-local caches di dwuma. Mfitiaseɛ overhead no taa yɛ kɛseɛ (ɛtaa yɛ 200+ KB) nanso ɛde multi-threaded adwumayɛ a ɛyɛ papa ma ɛnam lock akasakasa a ɛso atew nti.
- tcmalloc (Google Thread-Caching Malloc) — Ɛma thread biara cache a ɛbɛyɛ 2 MB default, a aggressive pre-allocation ka ho. Mfitiaseɛ overhead no yɛ kɛseɛ, nanso nkyekyɛmu nketewa a ɛdi akyire no yɛ ntɛmntɛm paa.
- musl libc's malloc — Ɛde nhyehyɛe a ɛyɛ mmerɛw kɛse a egyina mmap so di dwuma ma nkyekyɛmu nyinaa. Mfitiaseɛ ka a wɔbɔ no sua (mpɛn pii no ɛyɛ 4 KB pɛ wɔ nkyekyɛmu biara mu), nanso nkyekyɛmu biara ho ka yɛ kɛseɛ ɛnam nhyehyɛeɛ frɛ a wɔtaa frɛ nti.
- mimalloc (Microsoft) — Ɛde nkyekyɛmu a egyina nkyekyɛmu so a ɛwɔ nkyekyɛmu 64 MB di dwuma. Nkyekyɛmu a edi kan no kanyan 64 MB virtual reservation (a honam fam ahofama kakraa bi na ɛwɔ mu), aguadi address space ma locality soronko ne throughput.
Nneɛma a wobɛpaw wɔ saa nkyekyɛmu yi ntam no gyina w'adwuma so koraa. Wɔ server aplikeshɔn a ɛkɔ so kyɛ a ɛwɔ multi-threaded allocation a emu yɛ duru no, jemalloc anaa tcmalloc taa yɛ adwuma sen glibc default. Wɔ memory-constrained embedded systems ho no, musl kwan a ɛyɛ mmerɛw no betumi ayɛ papa ɛmfa ho sɛ throughput sua. Wɔ desktop ne server aplikeshɔn dodow no ara a wɔde di dwuma wɔ ɔkwan a ɛkɔ akyiri so no, ptmalloc2 72 KB mfitiaseɛ overhead no gyina hɔ ma default a nteaseɛ wom a ɛyɛ adwuma yie a enni tuning.
Tuning Mfitiaseɛ Nkyekyɛmu Suban
Sɛ default 72 KB mfitiaseɛ overhead no yɛ ɔhaw ampa ma wo dwumadie asɛm no — ebia wore spawn dwumadie mpempem pii a ɛkyɛ, a emu biara yɛ nsa kakraa bi pɛ a wɔkyekyɛ — glibc de tunables dodoɔ bi ma denam mallopt() ne MALLOC_ abusua a ɛwɔ environment variables.
M_TOP_PAD parameter no hwɛ sɛnea allocator no bisa nkaeɛ foforɔ dodoɔ a ɛboro deɛ ɛhia ntɛm ara so. Sɛ wode mallopt(M_TOP_PAD, 0) hyehyɛ no 0 a, ɛka kyerɛ akyekyɛfoɔ no sɛ ɔnbisa deɛ ɛhia nko ara, na ɛtew mfitiaseɛ overhead no so kɛseɛ. M_MMAP_THRESHOLD parameter no hwɛ kɛseɛ a ɛboro so a kyɛfa no de mmap di dwuma sen sɛ wɔde arena no bedi dwuma. M_TRIM_THRESHOLD no hwɛ bere a wɔasan de memory a wɔade wɔn ho aba OS no so. Na esiane sɛ glibc 2.26 nti, glibc.malloc.tcache_count ne glibc.malloc.tcache_max tunables no ma wohwɛ thread cache suban so.
Nanso, ahwɛyiye asɛm: ɛkame ayɛ sɛ bere nyinaa sɛ wobɛma saa parameters yi ayɛ ahwɛyiye anyɛ benchmarking no ma nneɛma sɛe kɛse. Wɔpaw defaults no gyinaa wiase ankasa profiling a ɛtrɛw so, na egyina hɔ ma beae a ɛyɛ dɛ ma adwuma dodow no ara. Gye sɛ wowɔ adanseɛ a emu yɛ den firi production profiling mu sɛ malloc overhead yɛ bottleneck — na woasusu wo nsakraeɛ no nkɛntɛnsoɔ — gyae defaults no nko ara. Premature optimization of the allocator yɛ yak shaving a ɛyɛ anifere titiriw a agye mfiridwuma nnɔnhwerew a enni ano ama mfaso a enni ano.
Nea Eyi Kyerɛkyerɛ Yɛn Fa Systems Programming Ho
72 KB ahintasɛm a edi kan a wɔkyekyɛ no yɛ, ne titiriw no, asuade a ɛfa abstraction layers ho. C++ ma wo adwemmɔne sɛ new int kyekyɛ baiti 4. Kasa gyinapɛn no ka saa. W’adwene mu nhwɛso no ka saa. Nanso wo koodu ne hardware no ntam no, nhyehyɛe ahorow a ɛyɛ nwonwa a wɔaboaboa ano te — C++ runtime, C nhomakorabea allocator, kernel no virtual memory subsystem, ne hardware no MMU ne TLB — emu biara de n’ankasa nneyɛe, optimizations, ne overhead ka ho.
Eyi nyɛ mfomso. Ɛyɛ asɛm a ɛwɔ systems software mu nyinaa. Layer biara wɔ hɔ sɛ ɛbɛdi ɔhaw ankasa ho dwuma: allocator no wɔ hɔ enti ɛnsɛ sɛ woyɛ system calls ma allocation biara. Virtual memory system no wɔ hɔ enti ɛnsɛ sɛ wohwɛ physical memory so tẽẽ. Kratafa mfomsoɔ ho dwumadiefoɔ no wɔ hɔ enti wɔde memory yɛ ɔbrɛ na ɛyɛ adwuma yie. Layer biara de transparency ketewaa bi di gua ma adwumayɛ ne ahotɔ kɛse.
| Sɛ́ ebia worekyekye bere ankasa mu aguadi nhyehyɛe, agodie engine, anaa adwumayɛ kwan a ɛsom nnipa mpempem pii a wɔde di dwuma no, tumi a wubesusuw ho wɔ nea wo mmara no yɛ ankasa wɔ nhyehyɛe no gyinabea no ne nea ɛtetew developers a wɔn ho akokwaw ne wɔn a wɔyɛ soronko no ntam. 72 KB no nyɛ bɔne. Ɛyɛ wo allocator a ɔreyɛ n’adwuma brilliantly.Yɛ Wo Adwumayɛ OS Ɛnnɛ
Efi freelancers so kosi nnwumakuw so, Mewayz ma nnwuma 138,000+ tumi a ɛwɔ module 207 a wɔaka abom. Fi ase kwa, upgrade bere a woanyin.
Yɛ Akontaabu a Wontua hwee →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