Hacker News

Kedu ihe kpatara oke C++ (m) mbụ ji bụrụ 72 KB mgbe niile?

Okwu

11 min read Via joelsiks.com

Mewayz Team

Editorial Team

Hacker News

Ihe omimi dị n'azụ oke C++ nke mbụ gị

Ị na-ede mmemme C++ dị mfe. Otu int ọhụrụ. bytes anọ. Ị na-agba ọkụ stracema ​​ọ bụ profaịlụ ebe nchekwa ọkacha mmasị gị, ma ọ dị - usoro gị chọrọ naanị 72 KB site na sistemụ arụmọrụ. Ọ bụghị 4 bytes. Ọ bụghị 64 bytes. Nke zuru oke 72KB. Ọ bụrụ na ị lerela nọmba ahụ anya wee na-eche ma ngwá ọrụ gị ọ na-agha ụgha nye gị, ọ bụghị naanị gị. Omume a dị ka ihe jọgburu onwe ya bụ otu n'ime ajụjụ ndị a na-ajụkarị n'etiti ndị mmepe C++ na-egwu ala n'ime memory internals na nke mbụ, azịza ya na-ewega anyị njem na-adọrọ adọrọ site na ọkwa nke na-anọdụ n'etiti koodu gị na ngwaike n'ezie.

Gịnị na-eme mgbe ị kpọrọ ọhụrụ

Iji ghọta ọnụ ọgụgụ 72 KB, ị ga-achọ ịchọpụta yinye oke n'uju. Mgbe koodu C++ gị na-eme int ọhụrụ, onye nchịkọta akụkọ na-atụgharị nke ahụ ka ọ bụrụ oku na-akpọ onye ọrụ ọhụrụ, nke na ọtụtụ sistemụ Linux na-enyefe mallocsite na glibc. Manamallocanaghị ajụ kernel ozugbo maka 4 bytes nke ebe nchekwa. The kernel na-arụ ọrụ na ibe - na-emekarị 4 KB na x86_64 - na ọnụ ahịa oku na-aga sistemụ dị nnukwu ihe gbasara ịnweta ebe nchekwa dị mfe. Ịkpọ brk()ma ọ bụ map() maka oke onye ọ bụla ga-eme ka mmemme ọ bụla na-abụghị obere ihe kwụsị.

Kama, ebe nchekwa glibc - mmejuputa a na-akpọ ptmalloc2, n'onwe ya sitere na Doug Lea kpochapụrụ dlmalloc - na-eme dị ka onye etiti. Ọ na-arịọ nnukwu ebe nchekwa site na kernel n'ihu, wee kpụrụ ya n'ime obere iberibe ka mmemme gị chọrọ ha. Nke a bụ isi ihe kpatara oke 4-byte mbụ gị ji ebute arịrịọ ka ukwuu na sistemụ arụmọrụ. Onye na-ekenye ihe anaghị emefusị ihe. Ọ na-eme atụmatụ.

Na-ekesa 72 KB: Ebe Bytes na-aga

Ofe nke mbụ na-abịa site na akụkụ dị iche iche nke oge ịgba ọsọ ga-ebido tupu ya enye gị ọbụna otu byte nke ebe nchekwa nwere ike iji. Ịghọta akụkụ nke ọ bụla na-akọwa ihe kpatara ọnụọgụgụ ji agbada ebe ọ na-eme.

Nke mbụ, glibc's malloc na-ebido Ahịhịa isi — usoro ndebe akwụkwọ bụ isi nke na-enyocha oke niile na eri isi. Ebe egwuregwu a gụnyere metadata maka obo, ntụnye ndepụta efu, na ihe arụrụ arụ maka nha oke dị iche iche. Onye na-ekenye ihe na-agbatị nkwụsịtụ mmemme site na sbrk(), na mgbakwunye mbụ na-achịkwa ya site na oke ime nke a na-akpọ M_TOP_PAD, nke na-adaba na 128 KB nke padding. Otú ọ dị, a na-edozi arịrịọ mbụ ahụ maka nhazi ihu akwụkwọ na ọnọdụ nkwụsịtụ dị ugbu a, nke na-ebutekarị arịrịọ mbụ dị nta - na-agbadata n'akụkụ ọnụ ọgụgụ 72 KB na usoro amalitere ọhụrụ.

Nke abụọ, kemgbe glibc 2.26, onye na-ekenye ihe na-ebu ụzọ wepụta thread-local cache(tcache) na ojiji mbụ. Tcache nwere bins 64 (otu kwa obere oke nha nha), nke ọ bụla nwere ike ijide ihe ruru chunks cache 7. The tcache_perthread_struct n'onwe ya na-eri ihe dị ka 1 KB, mana omume nke ịmalite ya na-akpalite nhazi ebe sara mbara. Nke atọ, oge ọsọ C++ ewepụtala ọkwa tupu ị isi()ọbụna na-agba ọsọ — static constructors, iostream buffer initialization for std ::coutna ndị enyi, na nhazi mpaghara niile na-enye aka na akara ukwu mbụ ahụ.

Sistemụ Arena na ihe kpatara ntinye aka ji bụrụ amamihe

Mkpebi ibu ụzọ ekenye nnukwu mkpirisi ebe nchekwa karịa ịrịọ ya iberibe abụghị ihe mberede nke mmejuputa. Ọ bụ azụmaahịa kpachara anya gbanyere mkpọrọgwụ n'ime ọtụtụ iri afọ nke ahụmịhe mmemme sistemụ. Oku ọ bụla na-aga na brk()ma ​​ọ bụ map() na-agụnye mgbanwe gburugburu site na oghere onye ọrụ gaa na oghere kernel, mgbanwe nke maapụ ebe nchekwa mebere usoro ahụ, yana nwelite tebụl ibe nwere ike. Na ngwaike ọgbara ọhụrụ, otu ọkpụkpọ oku na-akwụ ụgwọ ihe dị ka 100-200 nanoseconds - obere ihe dịpụrụ adịpụ, nnukwu ọdachi na ọnụ ọgụgụ.

Tụlee mmemme na-eme obere oke 10,000 n'oge mbido. Na-enweghị tupu ekenye ya, nke ahụ ga-apụta oku sistemụ 10,000, na-efu ihe dịka 1-2 milliseconds nke elu dị ọcha. Site na onye na-ekenye ihe dabere na mpaghara, oke nke mbụ na-akpalite otu oku sistemụ, yana oke 9,999 na-esote na-arụ ọrụ kpamkpam na oghere onye ọrụ site na mgbakọ na mwepụ na-arụ ọrụ ndepụta njikọ - nke ọ bụla na-ewe ihe dị ka 10-50 nanoseconds. Mgbakọ na mgbakọ na mwepụ enweghị mgbagha: tupu oke oke na-enweta mmeri site n'iwu nke ịdị ukwuu.

72 KB ị na-ahụ na ntinye mbụ gị abụghị ebe nchekwa efu - ọ bụ ntinye ego na-arụ ọrụ. Onye na-ekenye ihe na-akụ nzọ na mmemme gị ga-ekenye karịa n'oge adịghị anya, na n'ihe fọrọ nke nta ka ọ bụrụ ọnọdụ ụwa n'ezie, nzọ ahụ na-akwụ ụgwọ nke ọma. Ọnụ ego nke oghere adreesị mebere na-ejighị ya bụ efu na sistemụ 64-bit ọgbara ọhụrụ.

Ebe nchekwa Virtual vs. Ebe nchekwa anụ ahụ: Gịnị kpatara na ọ naghị emetụta

Ihe na-ewutekarị ndị mmepe na-ezute omume a na nke mbụ bụ mkpofu akụrụngwa. Ọ bụrụ na achọrọ m naanị bytes 4, gịnị kpatara mmemme m ji eri 72 KB? Nghọta dị oke egwu bụ nancheta nke mebere abụghị ebe nchekwa anụ ahụ. Mgbe glibc gbatịpụrụ nkwụsị mmemme site na 72 KB, kernel na-emelite maapụ ebe nchekwa mebere nke usoro ahụ, mana ọ naghị eji RAM anụ ahụ kwado ibe ndị ahụ ozugbo. A na-ekenye ezigbo ibe anụ ahụ ka achọrọ site na mmejọ ibe - naanị mgbe mmemme gị na-ede n'otu adreesị ka kernel na-ekenye ya ezigbo ibe ebe nchekwa.

💡 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 →

Nke a pụtara na n'agbanyeghị na usoro mebere nha nke usoro gị na-abawanye site na 72 KB, yaonye obibi set size(RSS) - ọnụọgụ RAM anụ ahụ riri - na-abawanye site na naanị ibe ndị ị metụrụ aka n'ezie. Maka otuintọhụrụ, nke ahụ na-abụkarị otu ibe 4 KB, gbakwunyere ibe ọ bụla metadata mpaghara nwere. Oghere mebere nke fọdụrụ na-anọdụ ebe ahụ, dị njikere maka ojiji, na-efu ihe ọ bụla ma ọ bụghị ohere adreesị - nke ị nwere 128 TB na sistemụ Linux 64-bit.

Nke a dị oke mkpa mgbe ị na-enyocha ma na-enyocha ngwa mmepụta. Ọ bụrụ na ị na-ewu ngwanrọ nke kwesịrị ịgbaso ezigbo oriri akụrụngwa - ma ọ bụ azụ azụ SaaS, microservice, ma ọ bụ pipeline nyocha dị ka ndị na-agba ọsọ na nyiwe dị kaMewayzmaka ọrụ azụmahịa - ị kwesịrị ị na-enyocha RSS mgbe niile karịa nha nha. Ngwa ndị dị ka /proc/[pid]/smaps, valgrind --tool=massif na pmap nwere ike inye gị akara ukwu ebe nchekwa anụ ahụ ziri ezi kama iduhie ọnụ ọgụgụ ebe nchekwa mebere.

Olee otú ndị na-ekenye ihe dị iche iche si eme nke mbụ

Ọgụgụ 72 KB bụ kpọmkwem maka ptmalloc2 nke glibc. Ndị na-ekenye ndị ọzọ na-eme mgbanwe dị iche iche, na oke oke nke mbụ na-adịgasị iche. Ịghọta ndịiche ndị a bara uru mgbe ị na-ahọrọ onye na-ekenye maka ngwa ndị nwere mmetụta na-arụ ọrụ.

  • jemalloc (nke Facebook na-eji, FreeBSD) - Na-eji nhazi mpaghara granular karịa nke nwere oghere-eriri mpaghara. Nfefe mbụ na-adị elu karịa (mgbe ọ na-abụkarị 200+ KB) mana ọ na-enye arụmọrụ ọtụtụ eriri ka mma n'ihi esemokwu mkpọchi mbelata.
  • tcmalloc (Google's Thread-Caching Malloc) - Na-ekenye cache nke ọ bụla dị ihe dị ka 2 MB na ndabara, na-eji oke ikenye oke. Ngofe mbụ dị elu, mana obere oke na-esote na-adị oke ngwa ngwa.
  • musl libc's malloc - Na-eji nhazi dị mfe karị dabere na mapmaka oke niile. Opekempe mbụ dị ntakịrị (na-abụkarị naanị 4 KB kwa oke), mana ọnụ ahịa nke oke n'otu n'otu dị elu n'ihi oku sistemụ na-agakarị.
  • mimalloc (Microsoft) — Na-eji oke dabere na ngalaba yana akụkụ 64 MB. Oke nke mbu na-ebute ndoputa mebere 64 MB (nwere obere ntinye aka nke anụ ahụ), oghere adreesị azụmaahịa maka mpaghara pụrụiche na ntinye.

Nhọrọ n'etiti ndị na-ekenye ndị a dabere kpamkpam n'ọrụ gị. Maka ngwa ihe nkesa na-adị ogologo oge nwere oke oke nwere ọtụtụ eriri, jemalloc ma ọ bụ tcmalloc na-egosipụtakarị ndabara glibc. Maka sistemu agbakwunyere na ebe nchekwa, ụzọ dị mfe musl nwere ike ịka mma n'agbanyeghị obere mmepụta ya. Maka ọtụtụ ngwa desktọpụ na ihe nkesa, ptmalloc2's 72 KB na-anọchi anya ndabara ezi uche dị na ya na-arụ ọrụ nke ọma na-enweghị nlegharị anya.

Na-emegharị akparamagwa ekenye mbụ

Ọ bụrụ na ndabara 72 KB mbụ n'elu bụ n'ezie nsogbu maka ojiji gị - ikekwe ị na-amụba puku kwuru puku usoro dị mkpụmkpụ, nke ọ bụla na-eme naanị ole na ole nke oke - glibc na-enye ọtụtụ tunables site na mallopt ()na MALLOC_ ezinụlọ nke mgbanwe gburugburu ebe obibi.

Nri M_TOP_PAD na-achịkwa oke ebe nchekwa nke onye na-ekenye na-arịọ karịa ihe achọrọ ozugbo. Tọọ ya na 0 na mallopt(M_TOP_PAD, 0) na-agwa onye na-ekenye ihe ka ọ rịọ naanị ihe achọrọ, na-ebelata ihe mbụ nke ukwuu. Oke M_MMAP_THRESHOLD na-achịkwa nha dị n'elu nke ekenyela na-eji map kama ịnọ n'ọgbọ egwuregwu. Ihe M_TRIM_THRESHOLD na-achịkwa mgbe ebe nchekwa eweghachitere na OS. Ma kemgbe glibc 2.26, ndị glibc.malloc.tcache_countna glibc.malloc.tcache_max tunables na-ahapụ gị ijikwa omume cache eri.

Otú ọ dị, okwu ịdọ aka ná ntị: imezi ihe ndị a na-ejighị nlezianya nyochaa akara ngosi na-eme ka ihe ka njọ. A họọrọ ndabara ndị ahụ dabere na nkọwapụta ụwa zuru oke, yana ha na-anọchite anya ebe dị ụtọ maka ọnụ ọgụgụ ka ukwuu nke ibu ọrụ. Ọ gwụla ma ị nwere ihe akaebe siri ike sitere na profaịlụ mmepụta na malloc n'elu bụ ihe mgbochi - ma ị tụlere mmetụta nke mgbanwe gị - hapụ naanị ndị na-adịghị mma. Nkwalite ngwa ngwa nke onye na-ekenye ihe bụ ụdị mkparị kachasị njọ nke ịkpụ afụ ọnụ nke ririla ọtụtụ awa injinia maka uru na-enweghị atụ.

Ihe Nke a Na-akụziri Anyị Banyere Mmemme Sistemu

Ihe omimi nke izizi nke 72 KB bụ, na isi ya, nkuzi gbasaraabstraction layers. C++ na-enye gị echiche efu na int ọhụrụ na-ekenye bytes anọ. Ụkpụrụ asụsụ kwuru otú ahụ. Ụdị uche gị na-ekwu otú ahụ. Mana n'etiti koodu gị na ngwaike na-anọdụ ọtụtụ sistemụ ọkaibe - oge ịgba ọsọ C ++, onye na-ahụ maka ọba akwụkwọ C, kernel's virtual memory subsystem, na ngwaike nke MMU na TLB - nke ọ bụla na-agbakwunye àgwà nke ya, njikarịcha na ihe karịrị ya.

Nke a abụghị ntụpọ. Ọ bụ akụkụ niile nke ngwanrọ sistemụ. Igwe oyibo ọ bụla dị iji dozie ezigbo nsogbu: onye na-ekenye ihe dị adị ka ị ghara ịkpọ oku usoro maka oke ọ bụla. Sistemụ ebe nchekwa mebere dị ka ịkwesighi ijikwa ebe nchekwa anụ ahụ ozugbo. Onye na-ahụ maka mmejọ ibe dị ka ebe nchekwa na-eme umengwụ na nke ọma. Ngwongwo ọ bụla na-azụta obere nghọta maka nnukwu ọrụ na ịdị mma.

Ndị na-emepụta ihe na-ewuli usoro ndị a pụrụ ịdabere na ya, ndị na-arụ ọrụ kachasị elu bụ ndị na-aghọta ọkwa ndị a - ọ bụghị n'ihi na ọ dị ha mkpa ịdị na-eche banyere ha mgbe niile, ma n'ihi na mgbe ihe na-atụghị anya ya mere (dị ka ihe omimi 72 KB oke), ha nwere ụdị uche iji ghọta ihe kpatara ya. Ma ị na-ewu usoro azụmaahịa dị adị, injin egwuregwu, ma ọ bụ ikpo okwu azụmahịa na-ejere ọtụtụ puku ndị ọrụ ozi, ikike ịtụgharị uche maka ihe koodu gị na-eme n'ezie na ọkwa sistemụ bụ ihe na-ekewa ndị mmepe tozuru etozu na ndị pụrụ iche. 72 KB abụghị ahụhụ. Ọ bụ onye na-ekenye gị na-arụ ọrụ ya nke ọma.

Mepụta OS azụmahịa gị taa

Site na freelancers gaa na ụlọ ọrụ, Mewayz na-enye ikike azụmahịa 138,000+ nwere modul 207 jikọtara ọnụ. Malite n'efu, kwalite mgbe ị na-etolite.

Mepụta Akaụntụ efu →

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