Hacker News

Aisea e 72 KB le fa'asoa muamua C++ (m)?

Fa'amatalaga

13 min read Via joelsiks.com

Mewayz Team

Editorial Team

Hacker News

O Le Mealilo i tua o Lau Fa'asoa muamua C++

E te tusia se polokalame faigofie C++. Se tasi int fou. Fa paita. E te fa'amumuina stracepo'o lau fa'amatalaga manatua e sili ona e fiafia i ai, ma o lo'o i ai - o lau fa'agasologa na faatoa talosagaina pe tusa ma le 72 KB mai le faiga fa'aoga. E le 4 paita. E le 64 paita. 72 KB atoa. Afai na e sioa i lena numera ma mafaufau pe na pepelo lau meafaigaluega ia te oe, e le o tuulafoaiina oe. Ole uiga uiga ese lea ole tasi ole fesili e masani ona fesiligia e le au atina'e C++ o lo'o eli i totonu o memory internals mo le taimi muamua, ma o le tali e ave ai i tatou i se malaga mata'ina i luga ole laulau o lo'o nofo i le va o lau code ma meafaigaluega moni.

O le a le mea e tupu pe a e Valaau fou

Ina ia malamalama i le fuainumera 72 KB, e tatau ona e su'eina le filifili atoa o le faasoasoaina. Pe a faʻatino e lau C++ codenew int, e faʻaliliu e le tagata faʻapipiʻi lena mea i se valaau i le operator new, lea i luga o le tele o faiga Linux e tuʻuina atu imallocmai le glibc. Ae malloce le fesili tuusao i le fatu mo 4 bytes o le manatua. O le fatu e galue i itulau - e masani lava 4 KB i luga o le x86_64 - ma o le tau o le telefoni feaveaʻi e tele e faʻatatau i se faʻaoga faigofie. O le vala'au i le brk() po'o le mmap() mo fa'asoaso'oga ta'itasi uma o le a fa'agata ai so'o se polokalame e le fa'atauaina.

Nai lo lena, o le glibc's memory allocator - o se faʻatinoga e taʻua o ptmalloc2, o ia lava na tupuga mai le Doug Lea's classicdlmalloc - galue o se tagata ogatotonu. Na te talosagaina poloka tetele o manatuaga mai le fatu i luma, ona vaneina lea i ni vaega laiti pe a manaʻomia e lau polokalama. Ole mafua'aga autu lea o lau fa'asoa muamua 4-byte e fa'aoso ai se talosaga tele atu i le faiga fa'aoga. O le tagata fa'asoa e le'o fa'amaumau. O lo'o fa'ata'atia.

Va'ese'ese le 72 KB: O Fea e Alu ai le Paita

O le fa'asoa muamua i luga e sau mai le tele o vaega ma'oti e tatau ona amatalia le taimi fa'agasolo a'o le'i mafai ona tu'uina atu ia te oe se byte e tasi o manatua fa'aoga. O le malamalama i vaega ta'itasi e fa'amatala ai le mafua'aga e tula'i mai ai le numera.

Muamua, o le glibc's malloc e amatalia le autu tele — o le fa'asologa o tusi tusi muamua e siaki uma ai vaega i le filo autu. O lenei malae e aofia ai metadata mo le fa'aputugā, fa'ailoga lisi-sa'oloto, ma fa'aputu talone mo le tele o fa'asoa. E fa'alautele e le tagata fa'asoa le malologa o le polokalame e ala i le sbrk(), ma o le fa'aopoopoga muamua o lo'o fa'atonutonuina e se parakalafa i totonu e ta'ua o le M_TOP_PAD, lea e fa'aletonu i le 128 KB o padding. Peita'i, o le ulua'i talosaga e toe fetu'una'i mo le fa'aogaina o le itulau ma le tulaga o lo'o i ai le malologa, lea e masani ona i'u ai i se talosaga muamua la'ititi - e masani ona tula'i latalata i le 72 KB fa'atusa i se faiga fa'ato'a amata.

Lua, talu mai le glibc 2.26, e fa'amataina e le tagata fa'asoa se filo-local cache (tcache) i le fa'aoga muamua. O le tcache o lo'o iai talone e 64 (tasi i le vasega la'ititi-vaevaega tele), ta'itasi e mafai ona tu'u i luga i le 7 pusi pu'e. O le tcache_perthread_struct lava ia e fa'aalu pe tusa ma le 1 KB, ae o le gaioiga o le fa'amataina e fa'aoso ai le fa'atulagaina o le malae. Tolu, o le C++ runtime ua uma ona fa'atino vaevaega a'o le'i alu lau main()e o'o lava i le tamo'e - static constructors, iostream buffer initialization mo std::coutma uo, ma le fa'alapotopotoga fa'apitonu'u e saofagā uma i lena tulagavae fa'aputuga muamua.

O le Arena System ma Aisea e Atamai ai le Mu'ai Fa'asoa

O le fa'ai'uga e mua'i tu'ufa'atasia se vaega tele o manatua nai lo le fa'atonuina fa'atasi e le o se fa'alavelave fa'atino. Ose fefa'ataua'iga fa'ainisinia fa'apitoa e maua'a i le tele o tausaga o fa'apolokalame fa'apolokalame. O vala'au uma i le brk()po'o le mmap()e aofia ai le suiga o fa'amatalaga mai le avanoa fa'aoga i le kernel space, suiga ole fa'asologa o fa'ata'ita'iga o mafaufauga fa'anatura, ma fa'afouga o le laulau itulau. I meafaigaluega fa'aonaponei, o le telefoni feavea'i e tasi e tusa ma le 100-200 nanoseconds - e le taua i le tu'ua'ese, fa'alavelave tele.

Manatu i se polokalame e 10,000 fa'asoa laiti i le taimi o le amataga. A aunoa ma le mua'i fa'asoa, o lona uiga e 10,000 telefoni feavea'i, e tusa ma le 1-2 milliseconds o le mama i luga. Fa'atasi ai ma se fa'avasegaga fa'avae, o le fa'asoa muamua e fa'aosoina ai se telefoni fa'aoga e tasi, ma o le 9,999 vaevaega mulimuli ane o lo'o fa'aogaina atoa ile avanoa fa'aoga e ala ile fa'asologa ole numera ma feso'ota'iga-lisi fa'agaoioiga - ta'itasi e ave pe tusa ma le 10-50 nanoseconds. E manino le numera: e malo le fa'asoa muamua i fa'atonuga o le tele.

O le 72 KB o lo'o e va'ai i lau fa'asoa muamua e le'o fa'amaumauina le manatua - o se fa'atinoga fa'afaigaluega. O lo'o fa'ailoa e le tagata fa'asoa fa'apea o lau polokalame o le a vave ona fa'aopoopo nisi fa'asoaga, ma e toetoe lava o fa'ata'ita'iga uma o le lalolagi, e matua'i totogia lena peti. Ole tau ole avanoa ole tuatusi faakomepiuta e matua leai lava ile faiga fa'aonaponei 64-bit.

Virtual Memory vs. Manatu Faaletino: Aisea e Le afaina ai

O se atugaluga masani i le au atia'e o lo'o fetaia'i ma lenei amio mo le taimi muamua o le otaota o puna'oa. Afai ou te manaʻomia naʻo le 4 paita, aisea e faʻaaoga ai e laʻu polokalame le 72 KB? O le faʻamatalaga taua o lemanatu faʻamaʻi e le o se manatua faaletino. Pe a faʻalauteleina e le glibc le malologa o le polokalame i le 72 KB, e faʻafouina e le fatu le faʻasologa o faʻasologa o mafaufauga, ae e le vave toe faʻafoʻi na itulau i le RAM faaletino. O itulau fa'aletino moni e fa'asoaina pe a mana'omia e ala i fa'aletonu itulau — na'o le taimi e tusi ai lau polokalame i se tuatusi fa'apitoa e tu'uina atu e le fatu se itulau moni e manatua 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 →

O lona uiga e ui lava ina fa'atuputeleina le tele o lau gaioiga i le 72 KB, ae o lonatagata nofomau(RSS) — o le aofa'i o le RAM fa'aletino e fa'aaoga moni - e fa'atupula'ia e na'o itulau e te pa'i moni ai. Mo se tasi new int, e masani lava e tasi le itulau 4 KB, fa'aopoopo i itulau o lo'o i ai i le metadata malae. O lo'o i ai le avanoa va'aia o lo'o totoe, sauni mo le fa'aoga, e leai se tau na'o le avanoa e tu'u ai - lea e iai lau 128 TB i luga o le 64-bit Linux system.

E taua tele lenei fa'aeseesega pe a fa'ailoa ma mata'ituina le fa'aogaina o talosaga. Afai o loʻo e fausiaina polokalama e manaʻomia le siakiina o le faʻaaogaina o punaoa moni - pe o se SaaS backend, se microservice, poʻo se auʻiliʻili paipa e pei o latou o loʻo tamomoe i luga o faʻasalalauga e pei o leMewayzmo pisinisi pisinisi - e tatau ona e mataʻituina pea le RSS nai lo le tele o le virtual. Meafaigaluega e pei o le /proc/[pid]/smaps, valgrind --tool=massif, ma le pmap e mafai ona tu'uina atu ia te oe tulagavae sa'o e manatua ai le tino nai lo le fa'aseseina o fuainumera fa'amanino.

E Fa'afefea Eseese Fa'asoa Fa'afoe le Fa'asoa Muamua

O le numera 72 KB e fa'apitoa ile glibc's ptmalloc2. E ese'ese fefa'ataua'iga a isi tagata fa'asoa, ma o le fa'asoa muamua o luga a'e e fesuisuia'i fa'atatau. O le malamalama i nei eseesega e taua tele pe a filifilia se fa'asoa mo fa'aoga e maaleale fa'atinoga.

  • jemalloc(fa'aoga e le Facebook, FreeBSD) — Fa'aaogā se fausaga fa'ato'aga fa'ato'aga fa'atasi ai ma fa'aoga filo fa'alotoifale. O le fa'auluulu muamua e foliga mai e maualuga (e masani lava 200+ KB) ae e sili atu le fa'atinoina o fa'asologa o filo e tele ona o le fa'aitiitia o fefinauaiga loka.
  • tcmalloc (Google's Thread-Caching Malloc) — Fa'asoa se fa'a-filo fa'amau e tusa ma le 2 MB ona o le fa'aletonu, fa'atasi ai ma le fa'amalosi muamua o le vaevaega. O le fa'auluuluga muamua e maualuga atu, ae o isi vaega laiti e matua vave tele.
  • musl libc's malloc — Fa'aaogaina se mamanu sili atu ona faigofie e fa'atatau i le mmapmo vaevaega uma. O le fa'auluuluga muamua e la'ititi (e masani lava na'o le 4 KB i le fa'asoasoaina), ae o le tau o le fa'asoasoaga e maualuga atu ona o le tele o telefoni fa'aleaogaina.
  • mimalloc (Microsoft) — Fa'aaoga vaega fa'avae fa'asoa fa'atasi ma vaega 64 MB. O le fa'asoa muamua e fa'aosoina ai le 64 MB virtual reservation (fa'atasi ai ma le fa'atauva'a fa'aletino), avanoa tuatusi fa'atau mo nofoaga fa'apitoa ma le fa'aogaina.

O le filifiliga i le va o nei fa'asoa e fa'alagolago atoa i lau galuega. Mo talosaga umi a le server ma le mamafa tele o filo, jemalloc po'o tcmalloc e masani lava ona sili atu le faaletonu o le glibc. Mo faiga fa'apipi'i fa'agata-mafaufau, atonu e sili atu le auala faigofie a le musl e ui ina maualalo le fa'aogaina. Mo le tele o talosaga i luga o le komepiuta ma le server, o le 72 KB muamua o le ulu o le ptmalloc2 o lo'o fa'atusalia ai se faaletonu talafeagai e aoga lelei e aunoa ma le fa'alogoina.

Fa'asa'o le Amio Fa'asoa Muamua

Afai o le fa'aletonu o le 72 KB muamua e matua fa'afitauli mo lau fa'aoga - masalo o lo'o e fa'atupuina le faitau afe o faiga pupuu, e tofu na'o ni nai vaega fa'asoa - e tu'uina atu e le glibc le tele o tunables e ala i mallopt()ma le MALLOC_ aiga o fesuiaiga o le siosiomaga.

O le M_TOP_PAD fa'ata'ita'iga e pulea ai le tele o manatuaga fa'aopoopo e mana'omia e le tagata fa'asoa i tua atu o mea e mana'omia vave. Fa'atulaga i le 0 ma le mallopt(M_TOP_PAD, 0)e ta'u atu i le tagata fa'asoa ina ia talosagaina na'o mea e mana'omia, ma fa'aitiitia ai le fa'asili muamua. O le M_MMAP_THRESHOLDfa'ailoga e pulea le tele o lo'o i luga o lo'o fa'aogaina e fa'asoa mmap nai lo le malae. O le M_TRIM_THRESHOLD e fa'atonu pe a toe fa'afo'i atu manatuaga i le OS. Ma talu mai le glibc 2.26, o le glibc.malloc.tcache_countma le glibc.malloc.tcache_max tunables e fa'atagaina oe e pulea le filo o le fa'aogaina o amioga.

Ae ui i lea, o se upu lapatai: o le fa'alogoina o nei ta'otoga e aunoa ma le fa'ata'ita'iina ma le fa'aeteete e toetoe lava o taimi uma e atili ai ona leaga. O fa'aletonu na filifilia e fa'atatau i le tele o fa'amatalaga i le lalolagi, ma o lo'o fai ma sui o se nofoaga manaia mo le tele o galuega. Se'i vagana ua i ai sau fa'amaoniga malosi mai le fa'alauiloaina o le gaosiga o le malloc i luga a'e o le ulu o se fagu - ma ua e fuaina le a'afiaga o au suiga - tu'u na'o fa'aletonu. O le fa'ata'ita'i vave o le tagata fa'asoa o se faiga fa'a'ole'ole fa'apitoa ole sele o le yak lea na alu ai le tele o itula fa'ainisinia mo se manuia fa'atauva'a.

O le a le mea e a'oa'o mai ai ia i matou e uiga i Faiga Polokalama

O le 72 KB fa'asoa muamua mealilo, i lona 'autu, o se lesona e uiga i papa fa'a'ese'ese. C ++ e tuʻuina atu ia te oe le faʻasesega e new intfaʻasoa 4 bytes. Fai mai le tulaga o le gagana. Fai mai lou mafaufau fa'atusa. Ae i le va o lau code ma meafaigaluega o loʻo i ai se faaputuga o faiga faʻapitoa - o le C++ runtime, le C library allocator, le kernel's virtual memory subsystem, ma le hardware's MMU ma TLB - e faʻaopoopo e taʻitasi a latou lava amio, faʻataʻitaʻiga, ma luga.

E le o se fa'aletonu. O le vaega atoa o polokalama faakomepiuta. E iai vaega ta'itasi e fo'ia ai se fa'afitauli moni: o lo'o iai le fa'asoa ina ia e le tau faia ni vala'au mo so'o se vaega. O lo'o iai le virtual memory system ina ia e le mana'omia le pulea sa'o o mafaufauga faaletino. O lo'o iai le fa'aletonu o le itulau ina ia fa'agasolo ma lelei le manatua. So'o se vaega e fefa'ataua'i sina vaega manino mo le tele o le fa'atinoga ma le fa'afaigofie.

O tagata atia'e latou te fausia faiga e sili ona fa'atuatuaina, e sili ona fa'atinoina, oi latou ia e malamalama i nei fa'avae - e le ona e mana'omia ona latou mafaufau i ai i taimi uma, ae ona o se mea e le'i fa'amoemoeina e tupu (pei o se mea lilo 72 KB fa'asoa), latou te maua le fa'ata'ita'iga mafaufau e malamalama ai pe aisea. Pe o lo'o e fausia se faiga tau fefa'ataua'iga moni, se ta'aloga ta'aloga, po'o se fa'alapotopotoga fa'apisinisi e tautuaina le faitau afe o tagata fa'aoga, o le tomai e fa'atatau i le mea moni o lo'o faia e lau code ile tulaga fa'aleaogaina o le mea lea e tu'u'ese'ese ai le au atina'e agava'a mai tagata fa'apitoa. O le 72 KB e le o se pusa. O lau fa'asoasoa o lo'o fa'atino lelei lana galuega.

Fausia Lau Pisinisi OS i Aso Nei

Mai tagata tuto'atasi i lala sooupu, Mewayz fa'aola le 138,000+ pisinisi fa'atasi ai ma le 207 fa'atasi. Amata fua, fa'aleleia pe a e tuputupu a'e.

Fausia se Teugatupe Saoloto →

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

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 →

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