Kini idi ti ipin akọkọ C ++ (m) nigbagbogbo 72 KB?
Comments
Mewayz Team
Editorial Team
Ohun ijinlẹ Lẹhin Pipin C ++ Akọkọ rẹ
O kọ eto C++ kan ti o rọrun. Kan int tuntun kan. Awọn baiti mẹrin. O ina sokestracetabi profaili iranti ayanfẹ rẹ, ati pe o wa — ilana rẹ kan beere ni aijọju 72 KB lati ẹrọ ṣiṣe. Ko 4 baiti. Ko 64 baiti. Ni kikun 72 KB. Ti o ba ti tẹjumọ nọmba yẹn tẹlẹ ti o si ṣe iyalẹnu boya ohun elo irinṣẹ rẹ n purọ fun ọ, iwọ kii ṣe nikan. Iwa ti o dabi ẹnipe burujai jẹ ọkan ninu awọn ibeere ti a n beere nigbagbogbo laarin awọn olupilẹṣẹ C ++ ti n walẹ sinu awọn ile-iṣẹ iranti fun igba akọkọ, ati pe idahun gba wa ni irin-ajo ti o fanimọra nipasẹ awọn ipele ti o joko laarin koodu rẹ ati ohun elo gangan.
Kini o ṣẹlẹ Nigbati O Pe titun
Lati ni oye nọmba 72 KB, o nilo lati wa kakiri pq ipin ni kikun. Nigbati koodu C ++ rẹ ba ṣiṣẹ tuntun int, olupilẹṣẹ naa tumọ iyẹn sinu ipe sioṣiṣẹ tuntun, eyiti o jẹ aṣoju pupọ julọ awọn ọna ṣiṣe Linux si malloclati glibc. Ṣugbọn mallocko beere taara kernel fun awọn baiti mẹrin ti iranti. Ekuro naa n ṣiṣẹ ni awọn oju-iwe - deede 4 KB lori x86_64 - ati idiyele ti ipe eto jẹ ibatan pupọ si iraye si iranti rọrun. Pipe brk()tabimap()fun gbogbo ipinpin kọọkan yoo jẹ ki eto eyikeyi ti kii ṣe bintin pọn lati da duro.
Dipo, olupin iranti glibc - imuse ti a pe ni ptmalloc2, funrararẹ sọkalẹ lati Doug Lea Ayebayedlmalloc- n ṣiṣẹ bi agbedemeji. O beere awọn bulọọki nla ti iranti lati ekuro iwaju, lẹhinna gbe wọn sinu awọn ege kekere bi eto rẹ ṣe nilo wọn. Eyi ni idi ipilẹ akọkọ ipin 4-baiti rẹ nfa ibeere ti o tobi pupọ si ẹrọ iṣẹ. Alocator kii ṣe apanirun. O jẹ ilana ilana.
Dissecting awọn 72 KB: Ibi ti awọn Bytes Lọ h2>
Ipin ipin akọkọ wa lati ọpọlọpọ awọn paati pato ti akoko asiko gbọdọ bẹrẹ ṣaaju ki o to le fun ọ paapaa baiti kan ti iranti ohun elo. Oye paati kọọkan ṣe alaye idi ti nọmba naa fi de ibi ti o ti ṣe.
Àkọ́kọ́, glibc's malloc ṣe ìpilẹ̀ṣẹ̀ gbagede àkọ́kọ́ — ìtòlẹ́sẹẹsẹ àkọ́kọ́ tí ń tọpasẹ̀ gbogbo àwọn ìpín tí ó wà lórí okùn àkọ́kọ́. Gbagede yii pẹlu metadata fun okiti, awọn itọka atokọ ọfẹ, ati awọn ẹya bin fun awọn titobi ipin oriṣiriṣi. Alocator fa isinmi eto naa nipasẹ sbrk(), ati pe itẹsiwaju akọkọ jẹ iṣakoso nipasẹ paramita inu ti a pe niM_TOP_PAD, eyiti o ṣe aipe si 128 KB ti padding. Bibẹẹkọ, ibeere ibẹrẹ gangan ni a ṣatunṣe fun titete oju-iwe ati ipo isinmi ti o wa tẹlẹ, eyiti o ma yọrisi ibeere akọkọ ti o kere ju - ibalẹ nigbagbogbo nitosi nọmba 72 KB yẹn lori ilana ti o ṣẹṣẹ bẹrẹ.
Ikeji, lati glibc 2.26, olupilẹṣẹ naa bẹrẹ cache-agbegbe agbegbe (tcache) ni lilo akọkọ. Tcache naa ni awọn apoti 64 (ọkan fun kilasi iwọn ipin-kekere), ọkọọkan ti o lagbara lati dimu to awọn chunks cache 7. Awọn tcache_perthread_structrara n gba ni ayika 1 KB, ṣugbọn iṣe ti ipilẹṣẹ rẹ nfa iṣeto ti gbagede gbooro. Ẹkẹta, akoko asiko-iṣẹ C++ ti ṣe awọn ipin tẹlẹ ṣaaju ki akọkọ() rẹ paapaa nṣiṣẹ — awọn olupilẹṣẹ aimi, iostream buffer initialization funstd::coutati awọn ọrẹ, ati iṣeto agbegbe gbogbo gbogbo ṣe alabapin si ipasẹ okiti ibẹrẹ yẹn.
Eto Arena naa ati Idi ti Ipin-iṣaaju Ṣe Smart h2> Ipinnu lati ṣaju-ipin ipin idaran ti iranti kuku ki o beere fun ẹyọ-ẹyọ kii ṣe ijamba ti imuse. O jẹ iṣowo imọ-ẹrọ mọọmọ ti fidimule ni awọn ewadun ti iriri siseto awọn eto. Gbogbo ipe si brk()tabimaapu()jẹ pẹlu iyipada ipo-ọrọ lati aaye olumulo si aaye ekuro, iyipada ti awọn maapu iranti iranti foju ilana, ati awọn imudojuiwọn tabili oju-iwe ti o pọju. Lori ohun elo ode oni, ipe eto ẹyọkan ni idiyele ni aijọju 100-200 nanoseconds — bintin ni ipinya, ajalu ni iwọn.
Wo eto kan ti o ṣe awọn ipin kekere 10,000 lakoko ipilẹṣẹ. Laisi ipin-iṣaaju, iyẹn yoo tumọ si awọn ipe eto 10,000, ti o ni idiyele isunmọ 1-2 milliseconds ti ori mimọ. Pẹlu ipin ti o da lori gbagede, ipin akọkọ nfa ipe eto ẹyọkan, ati awọn ipinpinpin 9,999 ti o tẹle ni a ṣe iṣẹ ni kikun ni aaye olumulo nipasẹ iṣiro ijuboluwo ati awọn iṣẹ atokọ ti o sopọ - ọkọọkan gba aijọju 10-50 nanoseconds. Iṣiro naa ko ni idaniloju: iṣaju-ipin ti bori nipasẹ awọn aṣẹ titobi.
72 KB ti o rii lori ipin akọkọ rẹ kii ṣe iranti asonu - o jẹ idoko-owo iṣẹ. Alocator n tẹtẹ pe eto rẹ yoo ṣe awọn ipin diẹ sii laipẹ, ati ni gbogbo awọn oju iṣẹlẹ gidi-aye, tẹtẹ naa sanwo ni ẹwa. Iye owo aaye adirẹsi foju ti ko lo jẹ odo ni pataki lori awọn ọna ṣiṣe 64-bit ode oni.
Iranti Foju vs Iranti Ti ara: Idi ti Ko ṣe pataki h2>
Ibakcdun ti o wọpọ laarin awọn olupilẹṣẹ ti o ba pade ihuwasi yii fun igba akọkọ ni isonu awọn orisun. Ti MO ba nilo awọn baiti 4 nikan, kilode ti eto mi n gba 72 KB? Imọye pataki ni peiranti foju kii ṣe iranti ti ara. Nigbati glibc ba fa isinmi eto naa nipasẹ 72 KB, ekuro naa ṣe imudojuiwọn awọn maapu iranti foju ti ilana, ṣugbọn kii ṣe afẹyinti awọn oju-iwe yẹn lẹsẹkẹsẹ pẹlu Ramu ti ara. Awọn oju-iwe ti ara gangan ni a pin lori ibeere nipasẹ awọn aṣiṣe oju-iwe — nikan nigbati eto rẹ ba kọwe si adirẹsi kan pato ni kernel fi oju-iwe iranti gidi kan si.
💡 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 tumọ si pe botilẹjẹpe iwọn foju ti ilana rẹ pọ si nipasẹ 72 KB, iwọnolugbe ṣeto iwọn(RSS) - iye Ramu ti ara ti o jẹ gangan - n pọ si nipasẹ awọn oju-iwe ti o fọwọkan gangan. Fun ẹyọkan inttitun, iyẹn ni igbagbogbo oju-iwe 4 KB kan, pẹlu eyikeyi oju-iwe ti metadata gbagede gba. Awọn aaye foju ti o ku joko nibẹ, ṣetan fun lilo, ko ni nkankan bikoṣe aaye adirẹsi - eyiti o ni TB 128 lori eto Linux 64-bit.
Iyatọ yii ṣe pataki nigbati o ba n ṣe profaili ati abojuto awọn ohun elo iṣelọpọ. Ti o ba n kọ sọfitiwia ti o nilo lati tọpa agbara awọn oluşewadi gidi - boya o jẹ ẹhin SaaS, microservice, tabi opo gigun ti atupalẹ bii awọn ti o ṣiṣẹ lori awọn iru ẹrọ biiMewayzfun awọn iṣẹ iṣowo - o yẹ ki o ma ṣe atẹle RSS nigbagbogbo ju iwọn foju lọ. Awọn irin-iṣẹ bii /proc/[pid]/smaps, valgrind --tool=massif, ati pmaple fun ọ ni awọn ami ifẹsẹtẹ iranti ti ara deede ju ki o ṣi awọn isiro iranti foju ṣina.
Bawo ni Awọn Allokato Yatọ Ṣe Mu Ipin Akọkọ
Nọmba 72 KB jẹ pato si ptmalloc2 glibc. Awọn apinfunni miiran ṣe awọn iṣowo oriṣiriṣi, ati ipinfunni ibẹrẹ akọkọ yatọ ni ibamu. Lílóye àwọn ìyàtọ̀ wọ̀nyí níyelórí nígbà tí o bá ń yan olùpín fún àwọn ohun èlò oníkókó.- jemalloc (ti Facebook lo, FreeBSD) - Nlo ẹya aaye gbagede granular diẹ sii pẹlu awọn caches agbegbe-o tẹle ara. Ibẹrẹ iṣaju n duro lati ga julọ (nigbagbogbo 200+ KB) ṣugbọn o funni ni iṣẹ ṣiṣe olona-asapo to dara julọ nitori ariyanjiyan titiipa idinku.
- tcmalloc (Google's Thread-Caching Malloc) — Npin cache-tẹẹrẹ kan ti isunmọ 2 MB nipasẹ aiyipada, pẹlu ipin-ipọn ṣaaju iṣaaju. Ibẹrẹ ti o ga julọ, ṣugbọn awọn ipin kekere ti o tẹle ni iyara pupọ.
- musl libc's malloc — Nlo apẹrẹ ti o rọrun pupọ ti o da lorimaapufun gbogbo awọn ipin. Ibẹrẹ akọkọ jẹ iwonba (nigbagbogbo o kan 4 KB fun ipin), ṣugbọn idiyele ipin-kọọkan ga julọ nitori awọn ipe eto loorekoore.
- mimalloc (Microsoft) — Nlo ipin-orisun ipin pẹlu awọn abala 64 MB. Ipinfunni akọkọ nfa ifiṣura fojuhan 64 MB (pẹlu ifaramo ti ara ti o kere ju), aaye adirẹsi iṣowo fun agbegbe alailẹgbẹ ati ṣiṣejade.
Yiyan laarin awọn ipin wọnyi da lori iṣẹ ṣiṣe rẹ patapata. Fun awọn ohun elo olupin ti n ṣiṣẹ gigun pẹlu ipinfunni olona-asapo ti o wuwo, jemalloc tabi tcmalloc ni igbagbogbo ju aiyipada glibc lọ. Fun awọn eto ifibọ ti o ni iranti, ọna ti o rọrun ti musl le jẹ ayanfẹ laibikita ilojade kekere. Fun pupọ julọ tabili-idi-gbogbo ati awọn ohun elo olupin, ptmalloc2's 72 KB iṣaju iṣaju akọkọ ti o ni oye ti o ṣiṣẹ daradara laisi atunṣe.
Titunse Iwa Pipin Ibẹrẹ
Ti aiyipada 72 KB iṣaju akọkọ jẹ iṣoro nitootọ fun ọran lilo rẹ - boya o n fa ẹgbẹẹgbẹrun awọn ilana igba kukuru, ọkọọkan n ṣe awọn ipin diẹ nikan - glibc n pese ọpọlọpọ awọn tunables nipasẹ mallopt ()ati MALLOC_ẹbi ti awọn oniyipada ayika.
Iparamita M_TOP_PAD n ṣakoso iye afikun iranti ti apini beere ju eyiti o nilo lẹsẹkẹsẹ. Ṣiṣeto rẹ si 0 pẹlu mallopt(M_TOP_PAD, 0)sọ fun olupilẹṣẹ lati beere ohun ti o nilo nikan, ti o dinku iṣaju akọkọ ni pataki. Ilana M_MMAP_THRESHOLD n ṣakoso iwọn ti o wa loke eyiti awọn ipin ti nlo map dipo gbagede. Awọn iṣakoso M_TRIM_THRESHOLD nigbati iranti ti o ti ni ominira pada si OS. Ati lati igba glibc 2.26, awọnglibc.malloc.tcache_countati glibc.malloc.tcache_max tunables jẹ ki o ṣakoso ihuwasi cache okun.
Sibẹsibẹ, ọrọ iṣọra: ṣiṣatunṣe awọn paramita wọnyi laisi isamisi iṣọra ti o fẹrẹ jẹ ki awọn nkan buru si. Awọn aiyipada ni a yan ti o da lori profaili gidi-aye nla, ati pe wọn ṣe aṣoju aaye didùn fun ọpọlọpọ awọn ẹru iṣẹ. Ayafi ti o ba ni ẹri ti o lagbara lati iṣelọpọ iṣelọpọ pe malloc lori oke jẹ igo - ati pe o ti wọn ipa ti awọn ayipada rẹ - fi awọn aṣiṣe silẹ nikan. Iṣapejuwe ti o ti tọjọ ti ipin jẹ ọna aibikita ni pataki ti irun yak ti o ti jẹ ainiye awọn wakati imọ-ẹrọ fun anfani aifiyesi.Kini Eyi Kọ Wa Nipa Siseto Awọn ọna ṣiṣe
Ohun ijinlẹ ipin-akọkọ 72 KB jẹ, ni ipilẹ rẹ, ẹkọ kan nipa awọn fẹlẹfẹlẹ abstraction. C++ fun ọ ni irokuro pe int tuntunpin awọn baiti 4. Iwọn ede sọ bẹ. Awoṣe opolo rẹ sọ bẹ. Ṣugbọn laarin koodu rẹ ati ohun elo ohun elo joko akopọ ti awọn ọna ṣiṣe fafa - akoko asiko C ++, olupilẹṣẹ ile ikawe C, eto ipilẹ iranti foju kernel, ati MMU ati TLB ohun elo - ọkọọkan n ṣafikun awọn ihuwasi tirẹ, awọn iṣapeye, ati oke.
Eyi kii ṣe abawọn. O jẹ gbogbo aaye ti sọfitiwia awọn ọna ṣiṣe. Layer kọọkan wa lati yanju iṣoro gidi kan: olutọpa wa nitorina o ko ni lati ṣe awọn ipe eto fun gbogbo ipin. Eto iranti foju wa nitoribẹẹ o ko ni lati ṣakoso iranti ti ara taara. Olutọju aṣiṣe oju-iwe naa wa nitorina iranti ti ṣe ni ọlẹ ati daradara. Gbogbo Layer ṣe iṣowo iye kekere ti akoyawo fun iye nla ti iṣẹ ṣiṣe ati irọrun.
Awọn olupilẹṣẹ ti o kọ igbẹkẹle julọ, awọn ọna ṣiṣe ti o ga julọ ni awọn ti o loye awọn ipele wọnyi - kii ṣe nitori wọn nilo lati ronu nipa wọn nigbagbogbo, ṣugbọn nitori nigbati nkan airotẹlẹ ba ṣẹlẹ (gẹgẹbi ipin 72 KB ohun ijinlẹ), wọn ni awoṣe ọpọlọ lati ni oye idi. Boya o n kọ eto iṣowo akoko gidi kan, ẹrọ ere kan, tabi pẹpẹ iṣowo ti n ṣiṣẹ awọn ẹgbẹẹgbẹrun awọn olumulo, agbara lati ronu nipa kini koodu rẹ ṣe ni ipele eto jẹ ohun ti o ya awọn olupilẹṣẹ ti o peye si awọn alailẹgbẹ. 72 KB kii ṣe kokoro kan. O jẹ ipinfunni rẹ n ṣe iṣẹ rẹ ni didan.
Kọ OS Iṣowo Rẹ Loni
Lati awọn freelancers si awọn ile-ibẹwẹ, Mewayz ṣe agbara awọn iṣowo 138,000+ pẹlu awọn modulu iṣọpọ 207. Bẹrẹ ọfẹ, igbesoke nigbati o ba dagba.
Ṣẹda akọọlẹ Ọfẹ →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