Ko e ha 'oku 'uluaki C ++ (m)vahe 72 KB ma'u pe?
Ngaahi fakamatala
Mewayz Team
Editorial Team
Ko e Misiteli 'i Ho'o 'Uluaki Vahevahe C++
'Oku ke tohi ha polokalama C++ faingofua. Ko ha intfo’ou ‘e taha. Ko e paiti ʻe fā. 'Oku ke tutu hake strace pe ko ho'o profiler manatu manakoa, pea 'oku 'i ai ia — ko ho'o founga ngaue na'e toki kole 'a e fakafuofua ki he 72 KB mei he sisitemi ngaue. 'Ikai ko e paiti 'e 4. ʻIkai ko e paiti ʻe 64. Ko e 72 KB kakato. Kapau kuó ke sio fakamamaʻu ki he fika ko iá pea fifili pe naʻe loi hoʻo meʻangāué kiate koe, ʻoku ʻikai ko koe pē. Ko e 'ulungaanga ngali kehe ko 'eni ko e taha ia 'o e ngaahi fehu'i 'oku fa'a 'eke 'i he lotolotonga 'o e kau developers C ++ keli ki he manatu internals 'i he fuofua taimi, pea 'oku 'ave kitautolu 'e he tali ki ha fononga fakaofo 'i he ngaahi la'i 'oku tangutu 'i he vaha'a 'o ho'o code mo e hardware mo'oni.
Ko e Me’a ‘oku Hoko ‘i he taimi ‘oku ke Ui ai ki he fo’ou
.Ke mahino 'a e fika 'o e 72 KB, 'Oku fie ma'u ke ke muimui'i 'a e seini vahevahe kakato. 'I he taimi 'oku fakahoko ai 'e ho'o C ++ code 'a e int fo'ou, 'Oku liliu 'e he compiler ia ki ha ui ki he ngaue fo'ou, 'a ia 'i he lahi taha 'o e ngaahi sisitemi Linux 'oku ne fakafofonga'i ki he malloc mei he glibc. Ka 'oku 'ikai ke kole fakahangatonu 'e he malloc 'a e kernel ki he 4 bytes 'o e manatu. 'Oku ngaue 'a e kernel 'i he ngaahi peesi — angamaheni 'aki 'a e 4 KB 'i he x86_64 — pea ko e totongi 'o ha ui 'o e sisitemi 'oku fu'u lahi 'aupito 'o fakatatau ki ha 'alunga faingofua 'o e manatu. Ko hono ui 'o e brk() pe mmap() ki he vahevahe fakafo'ituitui kotoa pe 'e 'ai ai ke tu'u ha fa'ahinga polokalama 'oku 'ikai mahu'inga.
Ka, 'oku ngaue 'a e vahevahe 'o e manatu 'a e glibc — ko ha fakahoko 'oku ui ko e ptmalloc2, 'a ia tonu 'oku tupu mei he kalasi 'o Doug Lea 'a e dlmalloc — 'oku ne ngaue ko ha tokotaha 'i he vaha'a. 'Oku ne kole 'a e ngaahi poloka lalahi 'o e manatu mei he kernel upfront, pea 'oku ne vane'i kinautolu ki ha ngaahi konga iiki ange 'o hange ko ia 'oku fie ma'u 'e ho'o polokalama. Ko e 'uhinga tefito 'eni 'oku fakatupu 'e ho'o fuofua vahevahe 4-byte ha kole lahi ange ki he sisitemi ngaue. 'Oku 'ikai ke maumau taimi 'a e allocator. Ko e fakapotopoto ia.
Ko hono faka'auha 'o e 72 KB: Ko e feitu'u 'oku 'alu ki ai 'a e ngaahi Bytes
Ko e 'uluaki vahevahe 'o e 'olunga 'oku ha'u ia mei ha ngaahi konga kehekehe 'oku pau ke initialize 'e he taimi lele kimu'a pea toki lava ke ne 'oatu kiate koe na'a mo ha byte 'e taha 'o e manatu 'oku lava ke faka'aonga'i. Ko e mahino ki he konga takitaha 'oku ne fakamatala'i 'a e 'uhinga 'oku tu'uta ai 'a e fika 'i he feitu'u 'oku ne tu'uta ai.
'Uluakí, 'oku kamata'i 'e he malloc 'o e glibc 'a e mala'e tefito — 'a e fokotu'utu'u tohi tefito 'oku ne muimui'i 'a e ngaahi vahevahe kotoa pe 'i he filo tefito. 'Oku kau 'i he mala'e ko 'eni 'a e metadata ki he fu'u 'akau, ngaahi faka'ilonga tau'ataina-lisi, mo e ngaahi fokotu'utu'u 'o e bin ki he ngaahi lahi kehekehe 'o e vahevahe. 'Oku fakalahi 'e he vahevahe 'a e malolo 'o e polokalama 'o fakafou 'i he sbrk(), pea 'oku pule'i 'a e 'uluaki fakalahi 'e ha fakangatangata 'i loto 'oku ui ko e M_TOP_PAD, 'a ia 'oku default ki he 128 KB 'o e padding. Ka neongo ia, 'oku fakatonutonu 'a e 'uluaki kole mo'oni ki he fakafe'unga'i 'o e peesi mo e tu'unga 'o e malolo 'oku 'i ai, 'a ia 'oku fa'a iku ki ha 'uluaki kole si'isi'i ange — 'oku angamaheni 'aki 'a e tu'uta ofi ki he fika ko ia 'o e 72 KB 'i ha founga na'e toki kamata.
Ua, talu mei he glibc 2.26, 'oku kamata'i 'e he vahevahe hafilo-fakalotofonua 'o e cache (tcache) 'i he 'uluaki faka'aonga'i. 'Oku 'i he tcache 'a e 64 bins (taha ki he kalasi lahi 'o e si'isi'i-vahevahe), 'oku takitaha malava ke ne pukepuke 'o a'u ki he 7 cached chunks. Ko e tcache_perthread_struct 'iate ia pe 'oku ne faka'aonga'i 'a e takatakai 'i he 1 KB, ka ko e ngaue 'o e kamata'i ia 'oku ne fakatupu 'a e fokotu'utu'u 'o e mala'e 'oku lahi ange. Tolu, kuo 'osi fakahoko 'e he taimi lele 'o e C ++ 'a e ngaahi vahevahe kimu'a pea toki lele ho'o main() na'a mo e lele — ngaahi langa static, iostream buffer kamata'anga ki he std::cout mo e ngaahi kaume'a, mo e fokotu'utu'u 'o e feitu'u 'oku nau tokoni kotoa ki he 'uluaki fu'u va'e ko ia.
Ko e Sisitemi 'o e Mala'e mo e 'Uhinga 'oku Poto ai 'a e Vahevahe kimu'a
Ko e tu'utu'uni ke tomu'a vahevahe ha konga lahi 'o e manatu kae 'ikai ko hono kole fakakonga 'oku 'ikai ko ha fakatu'utamaki 'o hono fakahoko. Ko ha tradeoff faka'enisinia fakakaukau'i ia 'oku aka 'i he ngaahi ta'u 'e hongofulu 'o e a'usia 'o e polokalama 'o e ngaahi sisitemi. Ko e ui kotoa pe ki he brk() pe mmap() 'oku kau ai ha liliu 'o e tu'unga mei he feitu'u 'o e tokotaha faka'aonga'i ki he feitu'u 'o e kernel, fakalelei'i 'o e ngaahi mape 'o e manatu virtual 'o e founga ngaue, mo e ngaahi fakafo'ou 'o e tepile peesi 'e lava ke hoko. 'I he ngaahi naunau fakaonopooni, 'oku fakamole 'e ha ui 'o e sisitemi 'e taha 'a e 100-200 nanoseconds — 'oku 'ikai mahu'inga 'i he fakamavahe'i, fakatu'utamaki 'i he fua.
Fakakaukau ki ha polokalama 'oku ne fai 'a e fanga ki'i vahevahe 'e 10,000 lolotonga 'a e kamata'anga. Ka 'ikai ha tomu'a vahevahe, 'e 'uhinga ia ki he 10,000 ngaahi ui 'a e sisitemi, 'oku fakamole fakafuofua ki he 1-2 milliseconds 'o e 'olunga ma'a. 'I ha allocator 'oku makatu'unga 'i he mala'e, 'oku fakatupu 'e he 'uluaki vahevahe ha ui 'o e sisitemi 'e taha, pea 'oku serviced kakato 'a e ngaahi vahevahe 'o e 9,999 'i he feitu'u 'o e tokotaha faka'aonga'i 'o fakafou 'i he pointer arithmetic mo e ngaahi ngaue 'o e lisi-fehokotaki — takitaha 'oku ne to'o 'a e 10-50 nanoseconds. 'Oku 'ikai ke veiveiua 'a e fika: 'oku ikuna 'a e vahevahe kimu'a 'i he ngaahi tu'utu'uni 'o e lahi.
Ko e 72 KB 'oku ke sio ki ai 'i ho'o 'uluaki vahevahe 'oku 'ikai ko ha manatu maumau — ko ha 'inivesimeni fakahoko ngaue. 'Oku betting 'a e allocator 'e fai 'e ho'o polokalama ha ngaahi vahevahe lahi ange 'i he taimi vave mai, pea 'i he meimei ngaahi tu'unga mo'oni kotoa pe 'o e mamani, 'oku totongi 'e he bet ko ia 'a e handsomely. Ko e fakamole ki he feitu'u tu'asila virtual 'oku 'ikai ke faka'aonga'i 'oku mahu'inga 'a e zero 'i he ngaahi sisitemi fakaonopooni 64-bit.
Manatu Faka-Virtual vs. Manatu Fakasino: Ko e ʻUhinga ʻOku ʻIkai Mahuʻinga Aí
Ko e hoha'a angamaheni 'a e kau developers 'oku nau fetaulaki mo e 'ulungaanga ko 'eni 'i he fuofua taimi ko e maumau'i 'o e ngaahi ma'u'anga tokoni. Kapau 'oku ou fie ma'u pe 'a e 4 bytes, ko e ha 'oku fakamoleki ai 'e he'eku polokalama 'a e 72 KB? Ko e ‘ilo fakatu’utamaki ko e manatu faka’ata ‘oku ‘ikai ko e manatu fakatu’asino. 'I he taimi 'oku fakalahi ai 'e he glibc 'a e malolo 'a e polokalama 'aki 'a e 72 KB, 'Oku fakafo'ou 'e he kernel 'a e ngaahi mape 'o e manatu virtual 'o e founga ngaue, ka 'oku 'ikai ke ne vave 'o fakafoki 'a e ngaahi peesi ko ia 'aki 'a e RAM fakatu'asino. Ko e ngaahi peesi fakatu'asino mo'oni 'oku vahevahe ia 'i he fie ma'u 'o fakafou 'i he ngaahi hala 'o e peesi — 'i he taimi pe 'oku tohi ai ho'o polokalama ki ha tu'asila pau 'oku vahe'i ai 'e he kernel ha peesi mo'oni 'o e manatu ki ai.
💡 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 →'Oku 'uhinga 'eni neongo 'oku tupulaki 'a e lahi 'o e virtual 'o ho'o founga ngaue 'aki 'a e 72 KB, ko hono nofo seti lahi (RSS) — 'a e lahi 'o e RAM fakatu'asino 'oku fakamoleki mo'oni — 'oku tupulaki 'aki pe 'a e ngaahi peesi 'oku ke pa ki ai mo'oni. Ki ha intfo'ou 'e taha, 'a ia 'oku angamaheni 'aki 'a e peesi 'e taha 4 KB, pea mo e ngaahi peesi 'oku nofo'i 'e he metadata 'o e mala'e. Ko e toenga 'o e feitu'u virtual 'oku tangutu 'i ai, mateuteu ke faka'aonga'i, 'oku 'ikai ha me'a 'e totongi ka ko e feitu'u tu'asila — 'a ia 'oku ke ma'u 'a e 128 TB 'i ha sisitemi Linux 64-si'isi'i.
'Oku mahu'inga 'aupito 'a e faikehekehe ko 'eni 'i he taimi 'oku profiling mo siofi 'a e ngaahi polokalama ngaohi. Kapau 'oku ke langa ha polokalama fakakomipiuta 'oku fie ma'u ke muimui'i 'a e fakamole mo'oni 'o e ma'u'anga tokoni — pe ko ha SaaS backend, ha microservice, pe ko ha paipa 'analaiso hange ko kinautolu 'oku lele 'i he ngaahi tu'unga hange ko e Mewayz ki he ngaahi ngaue 'a e pisinisi — 'Oku totonu ke ke siofi ma'u pe 'a e RSS kae 'ikai ko e lahi 'o e virtual. Ko e ngaahi meʻangāue hangē ko e /proc/[pid]/smaps, valgrind --tool=massif, mo e pmap ʻe lava ke ne ʻoatu kiate koe ʻa e ngaahi laʻivaʻe totonu ʻo e manatu fakatuʻasino kae ʻikai ko e ngaahi fika ʻo e manatu fakaʻata ʻoku takihalaʻi.
Founga hono Tokanga'i 'e he Kau Vahevahe Kehekehe 'a e 'Uluaki Vahevahe
Ko e fika 72 KB 'oku fakatefito ia 'i he ptmalloc2 'o e glibc. Ko e kau vahevahe kehe 'oku nau fai 'a e ngaahi fefakatau'aki kehekehe, pea 'oku kehekehe 'a e 'uluaki vahevahe 'o e 'olunga 'o fakatatau ki ai. Ko e mahino ki he ngaahi faikehekehe ko 'eni 'oku mahu'inga ia 'i he taimi 'oku fili ai ha allocator ki he ngaahi polokalama 'oku mahu'inga ki he fakahoko ngaue.
- jemalloc ('oku faka'aonga'i 'e he Facebook, FreeBSD) — 'Oku ne faka'aonga'i ha fokotu'utu'u 'o e mala'e 'oku lahi ange 'a e granular mo e ngaahi fakapulipuli 'o e filo-fakalotofonua. 'Oku hehema 'a e 'uluaki 'o e 'olunga ke ma'olunga ange (fa'a 200+ KB) ka 'oku ne 'omi 'a e fakahoko lelei ange 'o e multi-threaded koe'uhi ko e fakasi'isi'i 'o e fakakikihi 'o e loka.
- tcmalloc (Malloc 'o e Google 'o e filo-faka'ata) — Vahe'i ha filo 'o e filo 'e taha 'o e fakafuofua ki he 2 MB 'i he default, mo e vahevahe 'o e tomu'a 'o e 'ita. 'Oku ma'olunga ange 'a e 'uluaki fakamole, ka 'oku fu'u vave 'aupito 'a e fanga ki'i vahenga 'oku hoko mai. Malloc 'a e musl libc — 'Oku ne ngaue'aki ha tisaini faingofua ange 'aupito 'o makatu'unga 'i he mmap ki he ngaahi vahevahe kotoa pe. 'Oku si'isi'i 'a e 'uluaki 'overhead (fa'a 4 KB pe ki he vahenga), ka 'oku ma'olunga ange 'a e fakamole ki he vahenga koe'uhi ko e lahi ange 'a e ngaahi ui 'o e sisitemi.
- mimalloc (Microsoft) — Faka'aonga'i 'a e vahevahe 'oku makatu'unga 'i he konga mo e ngaahi konga 'o e 64 MB. Ko e 'uluaki vahevahe 'oku ne fakatupu ha 64 MB virtual reservation (mo e si'isi'i taha 'o e tukupa fakatu'asino), fefakatau'aki 'a e tu'asila 'o e feitu'u ki he feitu'u makehe mo e throughput.
Ko e fili 'i he vaha'a 'o e kau vahevahe ko 'eni 'oku makatu'unga kakato ia 'i ho'o kavenga ngaue. Ki he ngaahi polokalama 'o e seva 'oku lele loloa mo e vahevahe mamafa 'o e ngaahi filo lahi, jemalloc pe tcmalloc 'oku angamaheni 'aki 'a e outperforms 'a e glibc 'a e default. Ki he ngaahi sisitemi 'oku fakahu 'a e manatu-fakangatangata, 'e lava ke sai ange 'a e founga faingofua ange 'a e musl neongo 'a e throughput ma'ulalo ange. Ki he lahi taha 'o e ngaahi polokalama desktop mo e server taumu'a lahi, 'Oku fakafofonga'i 'e he ptmalloc2 'a e 72 KB 'uluaki 'o e 'olunga ha default 'uhinga lelei 'oku ngaue lelei 'o 'ikai ha tuning.
Tuning 'a e 'Uluaki Vahevahe 'o e 'Ulungaanga
Kapau 'oku palopalema mo'oni 'a e 'uluaki 'olunga 'o e default 72 KB ki ho'o keisi faka'aonga'i — mahalo 'oku ke spawning 'a e ngaahi founga nounou 'e lauiafe, takitaha 'oku ne fai ha ngaahi vahevahe si'isi'i pe — 'oku 'omi 'e he glibc ha ngaahi tunables 'o fakafou 'i he mallopt() mo e famili en.
Ko e M_TOP_PAD parameter 'oku ne pule'i 'a e lahi 'o e manatu 'oku kole 'e he vahevahe 'o fakalaka atu 'i he me'a 'oku fie ma'u vave. Ko hono fokotu'u ia ki he 0 'aki 'a e mallopt(M_TOP_PAD, 0) 'oku ne tala ki he tokotaha vahevahe ke kole pe 'a e me'a 'oku fie ma'u, 'o fakasi'isi'i 'a e 'uluaki 'o e 'olunga 'o lahi. Ko e M_MMAP_THRESHOLD 'oku ne pule'i 'a e lahi 'i 'olunga 'a ia 'oku faka'aonga'i 'e he ngaahi vahevahe 'a e mmap kae 'ikai ko e mala'e. 'Oku pule'i 'e he M_TRIM_THRESHOLD 'a e taimi 'oku fakafoki ai 'a e manatu fakatau'ataina'i ki he OS. Pea talu mei he glibc 2.26, 'oku faka'ata 'e he tunables ke ke pule'i 'a e 'ulungaanga 'o e cache 'o e filo. Kaekehe, ko ha lea fakatokanga: tuning 'a e ngaahi parameters ko 'eni 'o 'ikai ha benchmarking tokanga 'oku meimei ma'u pe 'oku ne 'ai ke toe kovi ange 'a e ngaahi me'a. Na'e fili 'a e ngaahi defaults 'o makatu'unga 'i he profiling lahi 'o e mamani mo'oni, pea 'oku nau fakafofonga'i ha feitu'u melie ki he konga lahi 'o e ngaahi kavenga ngaue. Tukukehe kapau 'oku 'i ai ha'o fakamo'oni fefeka mei he profiling 'o e ngaohi'anga koloa ko e malloc 'o e 'olunga ko ha bottleneck — pea kuo ke fua 'a e uesia 'o ho'o ngaahi liliu — tuku 'a e ngaahi defaults tokotaha pe. Ko e fakalelei'i vave 'o e allocator ko ha founga fakapulipuli tautautefito ki he tafi 'o e yak 'a ia kuo ne fakamoleki 'a e ngaahi houa 'enisinia ta'efa'alaua ki ha lelei 'oku 'ikai ke fu'u mahu'inga. Ko e misiteli 'o e 'uluaki vahevahe 'o e 72 KB, 'i hono uho, ko ha lesoni fekau'aki mo e ngaahi la'i fakakaukau. 'Oku 'oatu 'e he C ++ 'a e fakakaukau fakakaukau 'oku vahevahe 'e he int fo'ou 'a e 4 bytes. ʻOku pehē ʻe he tuʻunga ʻo e leá. ʻOku pehē ʻe hoʻo sīpinga fakaʻatamaí. Ka 'i he vaha'a 'o ho'o code mo e hardware 'oku tangutu ai ha fu'u 'o e ngaahi sisitemi fakapotopoto — 'a e taimi lele 'o e C ++, 'a e vahevahe 'o e laipeli C, 'a e subsystem 'o e manatu virtual 'a e kernel, pea mo e MMU mo e TLB 'o e hardware — takitaha tanaki atu 'ene ngaahi 'ulungaanga, optimizations, mo e 'olunga. 'Oku 'ikai ko ha hala 'eni. Ko e poini kotoa ia 'o e polokalama fakakomipiuta 'o e ngaahi sisitemi. 'Oku 'i ai 'a e layer takitaha ke solova ha palopalema mo'oni: 'oku 'i ai 'a e allocator ko ia 'oku 'ikai fie ma'u ke ke fai ha ngaahi ui 'o e sisitemi ki he vahevahe kotoa pe. 'Oku 'i ai 'a e sisitemi manatu virtual ko ia 'oku 'ikai fie ma'u ke ke pule'i fakahangatonu 'a e manatu fakatu'asino. 'Oku 'i ai 'a e peesi hala handler ko ia 'oku fakahoko 'a e manatu 'i he paie mo e lelei. 'Oku fefakatau'aki 'e he layer kotoa pe ha ki'i konga 'o e transparency ki ha lahi 'o e fakahoko mo e fakafiemalie. Ko e kau developers 'oku nau langa 'a e ngaahi sisitemi falala'anga taha, ma'olunga taha-ngaue ko kinautolu 'oku mahino kiate kinautolu 'a e ngaahi la'i ko 'eni — 'ikai koe'uhi 'oku nau fie ma'u ke fakakaukau ma'u pe kiate kinautolu, ka koe'uhi 'i he taimi 'oku hoko ai ha me'a ta'e'amanekina (hange ko ha vahevahe fakamisiteli 72 KB), 'Oku nau ma'u 'a e sipinga faka'atamai ke mahino kiate kinautolu 'a e 'uhinga. Pe 'oku ke langa ha sisitemi fefakatau'aki taimi mo'oni, ha misini va'inga, pe ko ha tu'unga pisinisi 'oku ne ngaue ki he kau faka'aonga'i 'e lauiafe, ko e malava ke fakakaukau ki he me'a 'oku fai mo'oni 'e ho'o code 'i he tu'unga 'o e sisitemi ko e me'a ia 'oku ne fakamavahe'i 'a e kau developers taukei mei he ngaahi me'a makehe. Ko e 72 KB 'oku 'ikai ko ha bug. Ko ho'o allocator ia 'oku ne fai 'ene ngaue 'i he ngingila.Ko e Me'a 'Oku Ako'i Mai 'e he Me'a ni Fekau'aki mo e Polokalama 'o e Ngaahi Sisitemi
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