Kwa nini mgao wa kwanza wa C++ (m) daima ni KB 72?
Maoni
Mewayz Team
Editorial Team
Siri Nyuma ya Ugawaji Wako wa Kwanza wa C++
Unaandika programu rahisi ya C++. Int mpya moja. Baiti nne. Unawasha strace au kiweka wasifu wako wa kumbukumbu unachokipenda, na hapo ndio - mchakato wako umeomba takriban 72 KB kutoka kwa mfumo wa uendeshaji. Sio ka 4. Sio ka 64. 72 KB kamili. Ikiwa umewahi kutazama nambari hiyo na kujiuliza ikiwa kifaa chako kilikuwa kinakudanganya, hauko peke yako. Tabia hii inayoonekana kuwa ya ajabu ni mojawapo ya maswali yanayoulizwa mara kwa mara miongoni mwa wasanidi programu wa C++ wanaochimba ndani ya kumbukumbu kwa mara ya kwanza, na jibu hutupeleka kwenye safari ya kuvutia kupitia safu ambazo hukaa kati ya msimbo wako na maunzi halisi.
Nini Hutokea Unapopiga mpya
Ili kuelewa takwimu ya KB 72, unahitaji kufuatilia msururu kamili wa ugawaji. Wakati msimbo wako wa C++ ukitumia int mpya, mkusanyaji hutafsiri hiyo kuwa wito kwa kiendeshaji kipya, ambacho kwenye mifumo mingi ya Linux hutuma malloc kutoka kwa glibc. Lakini malloc haiulizi kernel moja kwa moja kwa byte 4 za kumbukumbu. Kokwa hufanya kazi katika kurasa - kwa kawaida 4 KB kwenye x86_64 - na gharama ya simu ya mfumo ni kubwa sana ikilinganishwa na ufikiaji rahisi wa kumbukumbu. Kupigia simu brk() au mmap() kwa kila mgao wa kibinafsi kunaweza kufanya programu yoyote isiyo ya maana kusitisha.
Badala yake, kisambazaji kumbukumbu cha glibc - utekelezaji uitwao ptmalloc2, chenyewe kilitokana na dlmalloc ya Doug Lea ya asili - hufanya kazi kama mtu wa kati. Huomba hifadhi kubwa za kumbukumbu kutoka kwenye kokwa la mbele, kisha huchonga katika vipande vidogo kama programu yako inavihitaji. Hii ndiyo sababu kuu ya mgao wako wa kwanza wa 4-baiti kusababisha ombi kubwa zaidi kwa mfumo wa uendeshaji. Mgavi hafanyi ubadhirifu. Ni kuwa ya kimkakati.
Kutenganisha KB 72: Mahali Pesa za Baiti
Kipengele cha awali cha mgao hutoka kwa vipengee kadhaa tofauti ambavyo ni lazima muda wa utekelezaji uanzishwe kabla haujaweza kukupa hata baiti moja ya kumbukumbu inayoweza kutumika. Kuelewa kila sehemu kunaeleza kwa nini nambari inatua mahali inapofika.
Kwanza, glibc's malloc inaanzisha uwanja mkuu - muundo msingi wa uwekaji hesabu ambao unafuatilia mgao wote kwenye uzi mkuu. Uwanja huu unajumuisha metadata ya lundo, vielelezo vya orodha isiyolipishwa, na miundo ya pipa kwa ukubwa tofauti wa mgao. Kisambazaji huongeza muda wa kukatika kwa programu kupitia sbrk(), na kiendelezi cha awali kinatawaliwa na kigezo cha ndani kiitwacho M_TOP_PAD, ambacho ni chaguomsingi hadi 128 KB ya padding. Hata hivyo, ombi halisi la awali linarekebishwa kwa upatanishi wa ukurasa na nafasi iliyopo ya kukatika, ambayo mara nyingi husababisha ombi dogo la kwanza - kwa kawaida hutua karibu na kielelezo cha KB 72 kwenye mchakato ulioanza hivi karibuni.
Pili, kwa kuwa glibc 2.26, kisambazaji huanzisha akiba ya ndani ya nyuzi (tcache) kwa matumizi ya kwanza. Tcache ina mapipa 64 (moja kwa kila darasa la ukubwa wa mgao), kila moja ikiwa na uwezo wa kushikilia hadi vipande 7 vya akiba. tcache_perthread_struct yenyewe hutumia takriban 1 KB, lakini kitendo cha kuianzisha huanzisha usanidi mpana wa uwanja. Tatu, muda wa utekelezaji wa C++ tayari umetoa ugawaji kabla ya main() yako hata kuendeshwa — vijenzi tuli, uanzishaji wa bafa ya iostream kwa std::cout na marafiki, na usanidi wa eneo zote huchangia kwenye lundo hilo la mwanzo.
Mfumo wa Uwanja na Kwa Nini Ugawaji Mapema Ni Mahiri
Uamuzi wa kutenga mapema sehemu kubwa ya kumbukumbu badala ya kuiomba kidogo sio ajali ya utekelezaji. Ni biashara ya kimakusudi ya uhandisi iliyokita mizizi katika miongo kadhaa ya uzoefu wa programu ya mifumo. Kila simu kwa brk() au mmap() inahusisha ubadilishaji wa muktadha kutoka nafasi ya mtumiaji hadi nafasi ya kernel, urekebishaji wa mipangilio ya kumbukumbu ya mchakato, na masasisho ya jedwali ya ukurasa yanayowezekana. Kwenye maunzi ya kisasa, simu ya mfumo mmoja hugharimu takriban nanoseconds 100-200 - ndogo katika kutengwa, janga kwa kiwango.
Fikiria mpango ambao hutoa ugawaji mdogo 10,000 wakati wa uanzishaji. Bila mgao wa awali, hiyo itamaanisha simu 10,000 za mfumo, zinazogharimu takriban milisekunde 1-2 za uendeshaji halisi. Kwa kigawanyaji kinachotegemea uwanja, mgao wa kwanza huanzisha simu moja ya mfumo, na mgao 9,999 unaofuata huhudumiwa kikamilifu katika nafasi ya mtumiaji kupitia hesabu za pointer na shughuli za orodha zilizounganishwa - kila moja ikichukua takriban 10-50 nanoseconds. Hesabu haina utata: mgao wa awali hushinda kwa maagizo ya ukubwa.
KB 72 unazoziona kwenye mgao wako wa kwanza hazijapotea kumbukumbu — ni uwekezaji wa utendakazi. Mgawaji anaweka dau kuwa programu yako itatoa ugawaji zaidi hivi karibuni, na katika takriban kila hali ya ulimwengu halisi, dau hilo hulipa vizuri. Gharama ya nafasi ya anwani pepe isiyotumika kimsingi ni sufuri kwenye mifumo ya kisasa ya 64-bit.
Kumbukumbu ya Mtandao dhidi ya Kumbukumbu ya Kimwili: Kwa nini Haijalishi
Wasiwasi wa kawaida miongoni mwa wasanidi programu wanaokumbana na tabia hii kwa mara ya kwanza ni upotevu wa rasilimali. Ikiwa ninahitaji tu baiti 4, kwa nini programu yangu inatumia 72 KB? Ufahamu muhimu ni kwamba kumbukumbu halisi sio kumbukumbu ya kimwili. Wakati glibc inapanua mapumziko ya programu kwa 72 KB, kernel husasisha upangaji kumbukumbu wa mchakato, lakini hairudishi nyuma kurasa hizo kwa RAM halisi. Kurasa halisi halisi hugawiwa kwa mahitaji kupitia hitilafu za ukurasa — ni wakati tu programu yako inapoandika kwa anwani maalum ambapo kernel inaipa ukurasa halisi wa kumbukumbu.
💡 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 →Hii ina maana kwamba ingawa ukubwa pepe wa mchakato wako unaongezeka kwa 72 KB, ukubwa wake uliowekwa wa mkazi (RSS) - kiasi cha RAM halisi inayotumiwa - huongezeka kwa kurasa unazogusa pekee. Kwa int mpya moja, hiyo kwa kawaida ni ukurasa mmoja wa KB 4, pamoja na kurasa zozote ambazo metadata ya uwanja inachukua. Nafasi ya mtandaoni iliyosalia iko hapo, tayari kutumika, haigharimu chochote ila nafasi ya anwani - ambayo una TB 128 kwenye mfumo wa Linux wa 64-bit.
Utofauti huu ni muhimu wakati wa kuorodhesha na kufuatilia programu za uzalishaji. Ikiwa unaunda programu ambayo inahitaji kufuatilia matumizi halisi ya rasilimali - iwe ni usaidizi wa nyuma wa SaaS, huduma ndogo, au bomba la uchanganuzi kama zile zinazoendeshwa kwenye mifumo kama vile Mewayz kwa shughuli za biashara - unapaswa kufuatilia RSS kila wakati badala ya saizi pepe. Zana kama /proc/[pid]/smaps, valgrind --tool=massif, na pmap zinaweza kukupa nyayo sahihi za kumbukumbu badala ya kupotosha takwimu za kumbukumbu pepe.
Jinsi Wagawaji Tofauti Hushughulikia Ugawaji wa Kwanza
Kielelezo cha KB 72 ni mahususi kwa ptmalloc2 ya glibc. Wagawaji wengine hufanya biashara tofauti, na malipo ya awali ya mgao hutofautiana ipasavyo. Kuelewa tofauti hizi ni muhimu wakati wa kuchagua kigawanyaji kwa programu zinazozingatia utendakazi.
- jemalloc (inatumiwa na Facebook, FreeBSD) — Hutumia muundo wa uwanja wenye punjepunje na kache za ndani. Upepo wa awali huwa wa juu zaidi (mara nyingi 200+ KB) lakini hutoa utendakazi bora wa nyuzi nyingi kutokana na ugomvi uliopunguzwa wa kufuli.
- tcmalloc (Google's Thread-Caching Malloc) — Hutenga akiba ya kila nyuzi ya takriban MB 2 kwa chaguo-msingi, na mgao wa awali wa fujo. Rudia ya awali ni ya juu zaidi, lakini mgao mdogo unaofuata ni wa haraka sana.
- musl libc's malloc — Hutumia muundo rahisi zaidi kulingana na mmap kwa mgao wote. Rudia ya awali ni ndogo (mara nyingi ni KB 4 tu kwa kila mgao), lakini gharama ya kila mgao ni ya juu kutokana na simu za mara kwa mara za mfumo.
- mimalloc (Microsoft) — Hutumia mgao kulingana na sehemu na sehemu za MB 64. Mgao wa kwanza huanzisha uhifadhi wa mtandaoni wa MB 64 (pamoja na kujitolea kidogo), nafasi ya anwani ya biashara kwa eneo la kipekee na upitishaji.
Chaguo kati ya wagawaji hawa inategemea kabisa mzigo wako wa kazi. Kwa programu-tumizi za seva za muda mrefu zilizo na mgao mzito wa nyuzi nyingi, jemalloc au tcmalloc kwa kawaida hushinda chaguo-msingi la glibc. Kwa mifumo iliyopachikwa yenye vikwazo vya kumbukumbu, mbinu rahisi ya musl inaweza kuwa bora licha ya upitishaji wa chini. Kwa matumizi mengi ya kompyuta ya mezani na seva yenye madhumuni ya jumla, kichwa cha kwanza cha ptmalloc2 72 KB kinawakilisha chaguo-msingi kinachofaa ambacho hufanya kazi vizuri bila kusanidi.
Kurekebisha Tabia ya Awali ya Ugawaji
Ikiwa kichwa-msingi cha awali cha 72 KB kina matatizo kikweli kwa kesi yako ya utumiaji - labda unazalisha maelfu ya michakato ya muda mfupi, kila moja ikitoa mgao machache tu - glibc hutoa vifaa vingi vya kubadilishana kupitia mallopt() na MALLOC_ familia ya vigezo vya mazingira.
Kigezo cha M_TOP_PAD hudhibiti ni kiasi gani cha kumbukumbu cha ziada ambacho kigawanya anaomba zaidi ya kile kinachohitajika mara moja. Kuiweka kuwa 0 kwa mallopt(M_TOP_PAD, 0) humwambia mgawaji kuomba tu kile kinachohitajika, na hivyo kupunguza kwa kiasi kikubwa uelekezaji wa awali. Kigezo cha M_MMAP_THRESHOLD hudhibiti ukubwa wa juu ambao mgao hutumia map badala ya uwanja. M_TRIM_THRESHOLD hudhibiti wakati kumbukumbu iliyotolewa inarejeshwa kwenye Mfumo wa Uendeshaji. Na kwa kuwa glibc 2.26, vifaa vya glibc.malloc.tcache_count na glibc.malloc.tcache_max vinakuwezesha kudhibiti tabia ya kache ya nyuzi.
Hata hivyo, neno la tahadhari: kurekebisha vigezo hivi bila kuweka alama kwa uangalifu karibu kila mara hufanya mambo kuwa mabaya zaidi. Chaguomsingi zilichaguliwa kulingana na maelezo mafupi ya ulimwengu halisi, na zinawakilisha mahali pazuri kwa idadi kubwa ya kazi. Isipokuwa kama una ushahidi dhabiti kutoka kwa wasifu wa uzalishaji kwamba malloc ya juu ni kizuizi - na umepima athari ya mabadiliko yako - acha chaguo-msingi pekee. Uboreshaji mapema wa kisambazaji ni njia ya siri ya kunyoa yak ambayo imetumia saa nyingi za uhandisi kwa manufaa kidogo.
Hii Inatufundisha Nini Kuhusu Kupanga Mifumo
Siri ya 72 KB ya mgao wa kwanza ni, kiini chake, somo kuhusu tabaka za uondoaji. C++ inakupa udanganyifu kwamba int mpya inatenga baiti 4. Kiwango cha lugha kinasema hivyo. Mfano wako wa akili unasema hivyo. Lakini kati ya msimbo wako na maunzi kuna rundo la mifumo ya kisasa - muda wa kutumika wa C++, kisambazaji maktaba C, mfumo mdogo wa kumbukumbu ya kernel, na MMU na TLB ya maunzi - kila moja ikiongeza tabia zake, uboreshaji na uendeshaji.
Hii sio dosari. Ni hatua nzima ya programu ya mifumo. Kila safu ipo ili kutatua tatizo halisi: kigawaji kipo kwa hivyo sio lazima upige simu za mfumo kwa kila mgao. Mfumo wa kumbukumbu upo kwa hivyo sio lazima udhibiti kumbukumbu ya mwili moja kwa moja. Kidhibiti cha makosa ya ukurasa kipo kwa hivyo kumbukumbu inafanywa kwa uvivu na kwa ufanisi. Kila safu inauza kiasi kidogo cha uwazi kwa kiwango kikubwa cha utendakazi na urahisi.
Wasanidi programu wanaounda mifumo inayotegemewa na inayofanya kazi kwa kiwango cha juu zaidi ni wale wanaoelewa safu hizi - si kwa sababu wanahitaji kuzihusu kila mara, lakini kwa sababu wakati jambo lisilotarajiwa linapotokea (kama vile mgao wa ajabu wa KB 72), wana muundo wa kiakili wa kuelewa ni kwa nini. Iwe unaunda mfumo wa biashara wa wakati halisi, injini ya mchezo, au jukwaa la biashara linalohudumia maelfu ya watumiaji, uwezo wa kufikiria kuhusu kile ambacho msimbo wako unafanya katika kiwango cha mfumo ndio unaotenganisha wasanidi programu stadi kutoka kwa wale wa kipekee. KB 72 sio mdudu. Ni mtoaji wako anayefanya kazi yake kwa ustadi.
Jenga Mfumo wa Uendeshaji wa Biashara Yako Leo
Kutoka kwa wafanyakazi huru hadi mashirika, Mewayz inasimamia biashara 138,000+ kwa kutumia sehemu 207 zilizounganishwa. Anza bila malipo, pata toleo jipya zaidi unapokua.
Unda Akaunti Bila Malipo → div>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
We use cookies to improve your experience and analyze site traffic. Cookie Policy