Hoekom is die eerste C++ (m)-toekenning altyd 72 KB?
Ontdek waarom jou eerste C++ geheue toewysing 72 KB versoek in plaas van die verwagte grepe. Verken die malloc internals en OS geheue bestuur lae verduidelik.
Mewayz Team
Editorial Team
Die raaisel agter jou eerste C++-toekenning
Jy skryf 'n eenvoudige C++-program. 'n Enkele nuwe int. Vier grepe. Jy vuur strace of jou gunsteling geheue profiler aan, en daar is dit - jou proses het sopas ongeveer 72 KB van die bedryfstelsel aangevra. Nie 4 grepe nie. Nie 64 grepe nie. 'n Volle 72 KB. As jy al ooit na daardie nommer gestaar het en gewonder het of jou gereedskap vir jou gelieg het, is jy nie alleen nie. Hierdie oënskynlik bisarre gedrag is een van die vrae wat die meeste gevra word onder C++-ontwikkelaars wat vir die eerste keer in interne geheue delf, en die antwoord neem ons op 'n fassinerende reis deur die lae wat tussen jou kode en die werklike hardeware sit.
Wat gebeur as jy nuut bel
Om die 72 KB-syfer te verstaan, moet jy die volle toekenningsketting naspeur. Wanneer jou C++-kode nuwe int uitvoer, vertaal die samesteller dit in 'n oproep na operateur nuut, wat op die meeste Linux-stelsels na malloc vanaf glibc delegeer. Maar malloc vra nie die kern direk vir 4 grepe geheue nie. Die kern werk in bladsye - tipies 4 KB op x86_64 - en die koste van 'n stelseloproep is enorm relatief tot 'n eenvoudige geheuetoegang. Deur brk() of mmap() vir elke individuele toekenning te roep, sal enige nie-onbelangrike program tot stilstand kom.
In plaas daarvan, dien glibc se geheue toewyser - 'n implementering genaamd ptmalloc2, self afstam van Doug Lea se klassieke dlmalloc - as 'n middelman. Dit versoek groot blokke geheue van die kern vooraf, en sny dit dan in kleiner stukke soos jou program dit nodig het. Dit is die fundamentele rede waarom jou eerste 4-grepe-toekenning 'n veel groter versoek aan die bedryfstelsel veroorsaak. Die toewyser is nie verkwistend nie. Dit is strategies.
Ontleed die 72 KB: waarheen die grepe gaan
Die aanvanklike toewysingsbokoste kom van verskeie afsonderlike komponente wat die looptyd moet inisieer voordat dit selfs 'n enkele greep bruikbare geheue aan jou kan gee. Om elke komponent te verstaan, verduidelik hoekom die getal land waar dit kom.
💡 WETEN JY?
Mewayz vervang 8+ sake-instrumente in een platform
CRM · Fakturering · HR · Projekte · Besprekings · eCommerce · POS · Ontleding. Gratis vir altyd plan beskikbaar.
Begin gratis →Eerstens initialiseer glibc se malloc die hoofarena - die primêre boekhoudingstruktuur wat alle toekennings op die hoofdraad naspoor. Hierdie arena bevat metadata vir die hoop, vrylyswysers en binstrukture vir verskillende toekenningsgroottes. Die toewyser verleng die programonderbreking via sbrk(), en die aanvanklike uitbreiding word beheer deur 'n interne parameter genaamd M_TOP_PAD, wat verstek is na 128 KB se opvulling. Die werklike aanvanklike versoek word egter aangepas vir bladsybelyning en bestaande breekposisie, wat dikwels lei tot 'n kleiner eerste versoek - wat gewoonlik naby daardie 72 KB-syfer beland op 'n pas begin proses.
Tweedens, sedert glibc 2.26, initialiseer die toewyser 'n draad-plaaslike kas (tcache) by die eerste gebruik. Die tcache bevat 64 bakke (een per klein-toekenning grootte klas), elk in staat om tot 7 kas stukke te hou. Die tcache_perthread_struct self verbruik ongeveer 1 KB, maar die daad van inisialiseer dit veroorsaak die breër arena-opstelling. Derdens, die C++-looptyd het reeds toewysings uitgevoer voordat jou hoof() selfs loop - statiese konstruktors, iostream-buffer-inisialisering vir std::cout en vriende, en locale-opstelling dra alles by tot daardie aanvanklike hoopvoetspoor.
Die Arena-stelsel en waarom vooraftoewysing slim is
Die besluit om vooraf 'n aansienlike stuk geheue toe te wys eerder as om dit stuk-stuk aan te vra, is nie 'n toeval van implementering nie. Dit is 'n doelbewuste ingenieurswese wat gewortel is in dekades van stelselprogrammeringservaring. Elke oproep na brk() of mmap() behels 'n kontekswisseling van gebruikersspasie na kernspasie, wysiging van die proses se virtuele geheuekaarte en potensiële bladsytabelopdaterings. Op moderne hardeware kos 'n enkele stelseloproep ongeveer 100-200 nanosekondes - triviaal in isolasie, katastrofies op skaal.
Oorweeg 'n program wat 10 000 klein toekennings maak tydens inisialisering. Sonder vooraftoewysing sou dit 10 000 stelseloproepe beteken, wat ongeveer 1-2 millisekondes se suiwer bokoste kos. Met 'n arena-gebaseerde toewyser, die eerste toewysing trigg
Build Your Business OS Today
From freelancers to agencies, Mewayz powers 138,000+ businesses with 208 integrated modules. Start free, upgrade when you grow.
Create Free Account →Related Posts
- Voorreg is slegte grammatika
- Die millisekonde wat kankerbehandeling kan verander
- Die normalisering van korrupsie in organisasies (2003) [pdf]
- Kognitiewe skuld: wanneer snelheid die begrip oorskry
Frequently Asked Questions
Watter faktore beïnvloed die grootte van die eerste C++-toekenning?
Die grootte van die eerste C++-toekenning word beïnvloed deur verskeie faktore, insluitend die verskiling in geheue-allokering tussen die bedryfstelsel en die C++-runtime. Dit kan ook die aanwending van biblioteekfyles en die hoeveelheid metadata weergee. As 'n ontwikkelaar kan jy die grootte van jou toekenning verklein deur die gebruik van effektiewe geheue-allokering, die oplading van biblioteekfyles na die laaste nodigheid, en die gebruik van Mewayz se geheue-profielering teks om die beste allokering vir jou programme te bepaal (Mewayz, 208 modules, $49/mo).
Is die 72 KB-toekenning 'n probleem?
Die 72 KB-toekenning is nie noodwendig 'n probleem nie, maar 'n hoogs vraaglike en onverwagte grootte vir 'n eenvoudige C++-program. Dit kan 'n teken wees van ongeordende geheue-allokering of 'n onnodige oplading van biblioteekfyles. Echter, in sommige gevalle, soos byvoorbeeld in embedded-sisteme, kan 'n klein toekenning 'n voordeel wees. Daarom is dit belangrik om die oorsaak van die grootte te ondersoek en te bepaal of dit 'n probleem is vir jou spesifieke gebruikgeval.
Kan ek die grootte van my C++-toekenning verminder?
Jy kan die grootte van jou C++-toekenning verminder deur die gebruik van effektiewe geheue-allokering, die oplading van biblioteekfyles na die laaste nodigheid, en die ontwikkeling van programme met 'n kleiner footprint. Mewayz se geheue
Probeer Mewayz Gratis
All-in-one platform vir BBR, faktuur, projekte, HR & meer. Geen kredietkaart vereis nie.
Kry meer artikels soos hierdie
Weeklikse besigheidswenke en produkopdaterings. Vir altyd gratis.
Jy is ingeteken!
Begin om jou besigheid vandag slimmer te bestuur.
Sluit aan by 30,000+ besighede. Gratis vir altyd plan · Geen kredietkaart nodig nie.
Gereed om dit in praktyk te bring?
Sluit aan by 30,000+ besighede wat Mewayz gebruik. Gratis vir altyd plan — geen kredietkaart nodig nie.
Begin Gratis Proeflopie →Verwante artikels
Hacker News
Van RGB tot L*a*b* kleurruimte (2024)
Mar 8, 2026
Hacker News
Wys HN: Curiosity – DIY 6" Newtonian Reflector Telescope
Mar 8, 2026
Hacker News
SWE-CI: Evaluering van agentvermoëns in die instandhouding van kodebasisse via CI
Mar 8, 2026
Hacker News
Waarom Nieu-Seeland 'n uittog van ouer as 30's sien
Mar 8, 2026
Hacker News
KI-fout het moontlik bygedra tot meisieskoolbomaanval in Iran
Mar 8, 2026
Hacker News
KI en die onwettige oorlog
Mar 8, 2026
Gereed om aksie te neem?
Begin jou gratis Mewayz proeftyd vandag
Alles-in-een besigheidsplatform. Geen kredietkaart vereis nie.
Begin gratis →14-dae gratis proeftyd · Geen kredietkaart · Kan enige tyd gekanselleer word