Hacker News

Jatebɔ kɛli Stack kan

Kow fɔcogo

18 min read Via go.dev

Mewayz Team

Editorial Team

Hacker News

Mun na stack allocation nafa ka bon hali bi bi porogaramuw dilanni na

Tuma o tuma n’i ka baarakɛminɛn bɛ ɲinini dɔ baara, ka fɛn dɔ dabɔ, walima ka baarakɛcogo dɔ wele, latigɛ makunlen bɛ kɛ kɔfɛ : nin kunnafonidilan in ka kan ka sigi min hakili la ? San tan caman kɔnɔ, stack tilatilali kɛra hakilijagabɔ fɛɛrɛ teliyalenw dɔ ye, minnu bɛ se ka fɔ ka ɲɛ, minnu bɛ sɔrɔ porogaramukɛlaw bolo — o bɛɛ n’a ta, a faamuyabaliya bɛ to kosɛbɛ. Waati min na, n’o ye boli waati ɲɛnabɔlenw ye, nɔgɔbɔlaw, ani sankaba-native architectures, ka faamuyali sɔrɔ cogo min na ani waati min na ka tila-tila stack kan, o bɛ se ka kɛ danfara ye application min bɛ baarakɛla 10.000 ɲɛnabɔ ɲɔgɔn fɛ ani min bɛ buckles under 500. Mewayz la, an ka platform bɛ baara kɛ jagokɛyɔrɔ 138.000 ni kɔ ye ni module 207 integrated ye, microsecond kelen-kelen bɛɛ la, memory management jate bɛ kɛ.

Stack ni Heap : Jagokɛcogo jɔnjɔn

Hakilila min bɛ porogaramu sigida fanba la, o tilalen don mara fɔlɔ fila ye : stack ani heap. Stack bɛ baara kɛ i n’a fɔ don laban, bɔ fɔlɔ (LIFO) kunnafonidilan. Ni baarakɛcogo dɔ welera, "frame" kura bɛ gɛrɛ stack kan min kɔnɔ sigida fɛn caman bɛ sɔrɔ, segin ladɛrɛsiw, ani baarakɛcogo paramɛtɛrɛw. Ni o baara seginna, o yɔrɔnin bɛɛ la, karamɔgɔ bɛɛ bɛ bɔ kɛnɛ kan o yɔrɔnin bɛɛ. Ɲini tɛ yen, gafemara tɛ yen, tila-tila tɛ yen — taamasiyɛn kelen ladilanni dɔrɔn.

Heap , o ni ɲɔgɔn cɛ , o ye hakilijagabɔlanba ye min kɔnɔ tilali ni tilabaliya bɛ se ka kɛ cogo o cogo . O sɛgɛsɛgɛli in bɛ na ni musaka ye : jatebɔla ka kan ka bloki minnu bɛ hɔrɔnya la, olu lajɛ, ka tila-tilacogo ɲɛnabɔ, ani kan caman na, a ka kan k’a jigi da nɔgɔbɔlan kan walasa ka hakilijagabɔ min ma baara kɛ, o sɔrɔ kokura. Heap tilali C porogaramu danma kɔnɔ, o bɛ waati 10 fo 20 ɲɔgɔn ta ka tɛmɛ stack tilali kan. Nɔgɔ-la-kanw na i n’a fɔ Java walima C#, sanfɛla bɛ se ka bonya yɛrɛ ni dalajɛ lafiɲɛbɔw jatera.

o jago in faamuyali tɛ kalanko dɔrɔn ye . N’i bɛ porogaramuw jɔ minnu bɛ jago ba caman baara segin kɔnɔ — a kɛra fatura motɛri ye wo, waati yɛrɛyɛrɛ sɛgɛsɛgɛli dakun ye wo, walima CRM ye min bɛ mɔgɔw ka ɲɔgɔnye caman ladonni ɲɛnabɔ — n’i ye jatebɔ fɛɛrɛ ɲuman sugandi sira funtenimaw kama, o bɛ nɔ bila jaabi waatiw la ani fɛnsɔrɔ musakaw la k’a ɲɛsin u yɛrɛ ma.

Stack allocation bɛ baara kɛ cogo min na tiɲɛ na

Ni fɛnɲɛnamafagalanw ta fan fɛ, baarakɛminɛnw dilanni fanba bɛ sɛbɛnnikɛlan dɔ (stack pointer) bila ka stack sanfɛla lajɛ sisan. Hakilila tilatilali stack kan o ka nɔgɔn i n’a fɔ ka nin pointeur in dɔgɔya ni bayt hakɛ wajibiyalen ye. Deallocation ye kɔsegin ye: dɔ fara pointeur kan. Metadata kunkankow tɛ yen, lisi hɔrɔnw tɛ yen, blokiw kɛrɛfɛtaw faralen ɲɔgɔn kan tɛ yen. O de y’a to stack allocation bɛ ɲɛfɔ tuma caman na ko O(1) bɛ kɛ ni waati basigilen baarakɛcogo ye ni sanfɛla ye min tɛ jate.

Aw ye baarakɛcogo dɔ jateminɛ min bɛ jatebɔ kɛ fatura layini fɛn dɔ bɛɛ lajɛlen na . A bɛ se ka sigida fɛn damadɔw fɔ: hakɛ dafalen, sɔngɔ kelen sɛgɛsɛgɛli, impositi hakɛ jiginni, ani sɔrɔta sɛgɛsɛgɛli. Nafa naani bɛɛ bɛ Gɛn ka Taa kulu kan ni baarakɛcogo Dònna, ka Segin a yɛrɛma ni a Bɔra. Ɲɛnamaya taabolo bɛɛ ye dantigɛli ye wa a bɛ zeru don porogaramukɛla walima nɔgɔbɔla dɔ fɛ.

ye

hakilila jɔnjɔn : Stack tilatilali tɛ teliya dɔrɔn — a bɛ se ka fɔ ka ɲɛ . Baarakɛcogo kɔrɔtalen sigidaw la, a ka c’a la, ko kɔrɔfɔli nafa ka bon ka tɛmɛ teliya raw kan. Baara min bɛ ban tuma bɛɛ mikrosekɔndi 2 kɔnɔ, o nafa ka bon ka tɛmɛ min bɛ kɛ mikrosekɔndi 1 cɛmancɛ la nka a bɛ wuli tuma dɔw la ka se mikrosekɔndi 50 ma k’a sababu kɛ nɔgɔ lajɛ jɔli ye.

ye

waati min na ka ɲɛsin stack allocation ma

donan bɛɛ tɛ stack kan . Stack hakilijagabɔ dan ye (a ka c’a la, 1 MB ni 8 MB cɛ jirisun kelen na, ka kɛɲɛ ni baarakɛminɛn ye), wa kunnafoniw minnu bɛ tila stack kan, olu tɛ se ka tɛmɛ baara kan min y’a da. Nka, ko jɛlenw bɛ yen minnu na stack allocation ye sugandili ɲuman ye.

  • sigida fɛn caman bɛrɛbɛrɛ minnu bɛ mɛn waati kunkurunnin kɔnɔ : Jatebɔlaw , dalajɛlanw , waatilama bufaw kilobayiti damadɔ jukɔrɔ , ani lupu indisew ye fɛn ye min bɛ bɛn sigida ma . U bɛ dabɔ, ka baara kɛ ni u ye, ka fili baarakɛcogo kelen kɔnɔ.
  • donanw sigicogo hakɛ latigɛlenw : Array minnu ka jatebɔ-waati hakɛ dɔnna , sigicogo misɛnninw , ani nafa suguyaw bɛ se ka bila kulu kan k’a sɔrɔ farati tɛ u falenni na . 256-bayt buffer min bɛ kɛ ka don sɛrɛkili dɔ labɛn, o ye kandida dafalen ye.
  • kɔnɔna-lupulu minnu nafa ka bon baarakɛcogo la : Ni baarakɛcogo dɔ welera siɲɛ miliyɔn caman segin kɔnɔ — i n’a fɔ sɔngɔko jatebɔ-motɛri min bɛ segin-ka-bɔ fɛn dilannenw ka gafew kan — ka kulu tilatilali ban lupu farikolo la, o bɛ se ka kɛ sababu ye ka baarakɛcogo ɲɛtaa sɔrɔ siɲɛ 3 fo siɲɛ 10.
  • Waati yɛrɛ la walima waati latɛmɛni siraw : Sarako baarakɛcogo , dakun ɲɛnamaw ladamuni , ani kunnafoniw cicogo bɛɛ bɛ nafa sɔrɔ nɔgɔbɔ lafiɲɛbɔw kɔlɔsili la minnu tɛ dantigɛli ye .
  • Algorisimu minnu bɛ segin-ka-bɔ ni u juguya dan ye : N’i bɛ se ka garanti di ko segin-ka-bɔnye juguya bɛ to dan lakananen kɔnɔ, stack-allocated frames bɛ segin-ka-bɔnye baarakɛcogo teliya ani ka nɔgɔya.

Tiɲɛ na, bi daɲɛgafebɔlaw ka ɲi kosɛbɛ stack baarakɛcogo ɲuman na. Fɛɛrɛ minnu bɛ i n’a fɔ boli sɛgɛsɛgɛli Go ani Java ka JIT daɲɛgafe kɔnɔ, olu bɛ se ka heap allocations (dafalenw) bila u yɛrɛma ka taa stack la ni compiler y’a jira ko kunnafoniw tɛ boli baarakɛcogo la. Nin ɲɛtaa ninnu faamuyali b’a to i bɛ se ka kode saniyalen sɛbɛn k’a sɔrɔ i bɛ nafa sɔrɔ hali bi stack baarakɛcogo la.

jaan minnu bɛ sɔrɔ ɲɔgɔn fɛ ani u yɛrɛ tangacogo

Stack-related bug min tɔgɔjugu bɔra kosɛbɛ o ye stack overflow ye — data caman tilatilali ka tɛmɛ stack bɛ se ka min minɛ, a ka c’a la, recursion dan tɛ min na walima sigida sɛrɛkiliw fɛ minnu ka bon kojugu. Fɛn dilanni sigida la, a ka c’a la, stack overflow bɛ dilan walima a kɛcogo bɛɛ tiɲɛ ni segin sira ɲuman tɛ. O de y’a to karamɔgɔya ni baarakɛminɛnw bɛ dan sigi stack hakɛ la.

Jaan nɔgɔlen wɛrɛ ye ka taamasiyɛnw walima fɛnw segin minnu bɛ tali kɛ stack-allocated dataw la. Ikomi stack memory bɛ Lasegin waati min na baarakɛcogo dɔ seginna, o hakilijagabɔlan jiralan fɛn o fɛn bɛ Kɛ dangling reference ye. C ni C++ la, o bɛ na ni kɛwale ɲɛfɔbali ye min bɛ se ka kɛ i n’a fɔ a bɛ baara kɛ kɔrɔbɔli la nka a bɛ dɛsɛ kosɛbɛ fɛn dilanni na. Rust ka juruko sɛgɛsɛgɛlikɛla bɛ nin fili suguya in minɛ daɲɛgafe-sɛbɛnni waati la, o ye sababu dɔ ye kan in ye traction sɔrɔ sistɛmu porogaramuw la.

ko sabanan bɛ tali kɛ jiriw lakanani na . Thread kelen-kelen bɛɛ b’a yɛrɛ ka stack sɔrɔ, o kɔrɔ ye ko stack-allocated data ye thread-local ye u yɛrɛ la. O ye nafa ye tiɲɛ na ko caman na — dakun si man kan ka kɛ walasa ka se ka sigida fɛn caman sɛgɛsɛgɛli kɛ. Nka, tuma dɔw la, baarakɛlaw bɛ fili k’a ɲini ka stack-allocated data (daɲɛw) tila-tila jirisunw ni ɲɔgɔn cɛ, o bɛ na ni siya cogoyaw ye walima baarakɛcogo-ko-furu-bugw. Ni kunnafoniw ka kan ka tila-tila jirisunw cɛma walima ni u bɛ to ka tɛmɛ baarakɛcogo weleli kan, kulu ye sugandili bɛnnen ye.

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

Stack Allocation kanw ni karamɔgɔya siratigɛ la

Porogaramukan danfaralenw bɛ stack tilatilali ɲɛnabɔ ni kɛnɛya hakɛ caman ye. C ni C++ kɔnɔ, porogaramukɛla bɛ ni kunnafoni jɛlen ye : sigida fɛn caman bɛ taa kulu kan, ani malloc walima new bɛ kunnafoniw bila kulu kan. Go kɔnɔ, daɲɛgafe bɛ boli sɛgɛsɛgɛli kɛ walasa ka a latigɛ a yɛrɛma, wa goroutines bɛ daminɛ ni 2 KB stack misɛnninw ye minnu bɛ bonya ni fanga ye — fura cɛɲi min bɛ lakana ni baarakɛcogo balansi. PHP, n’o ye kan fanga-dakunw ye i n’a fɔ Laravel, o bɛ nafa fanba tila a kɔnɔna Zend Engine hakilijagabɔ-minɛn fɛ, nka sariyakolo minnu bɛ a kɔnɔ, olu faamuyali bɛ baarakɛlaw dɛmɛ ka kode sɛbɛn ka ɲɛ hali baarakɛminɛnw ta fan fɛ.

| Ni modulu 207 bɛ baarakɛwaati kelen tila, ka dɔ bɔ ɲinini kelen-kelen bɛɛ hakilijagabɔ la ni hali 15% ye, o bɛ se ka kɛ sababu ye ka dɔ bɔ nafama na sèrwɛri musakaw la ani ka ɲɛtaa sumanikɛlanw jaabi waatiw la, baarakɛla labanw bolo minnu b’u ka jagokow ɲɛnabɔ kɛnɛ kan.

JavaScript ni TypeScript, minnu bɛ bi ɲɛfɛla fanba ni Node.js kɔkannafɛnw fanga di, olu bɛɛ bɛ u jigi da V8 motɛri ka nɔgɔbɔlan kan hakilijagabɔ la. Dabɔbaa tɛ Se ka jatebɔ Kɛ k’a ɲɛsin stack ma, nka V8 ka optimizing compiler (TurboFan) bɛ stack tilatilali Kɛ kɔnɔna na nafaw kama a bɛ Se k’a Jira ko u tɛ mɛn. Baarakɛcogo misɛnninw, saniyalenw sɛbɛnni ni sigida fɛn caman sɛgɛsɛgɛli ye, o bɛ cogo ɲuman di motɛri ma walasa ka nin ɲɛtaa ninnu waleya.

Fɛɛrɛ waleyali minnu bɛ kɛ ka kuluw ka tansiyɔn dɔgɔya

Hali n’i bɛ baara kɛ kan sanfɛla la i tɛ se ka stack ni heap allocation kɔlɔsi yɔrɔ min na, i bɛ se ka misaliw ta minnu bɛ heap degun kunntanw dɔgɔya ani ka boli waati bila ka ɲɛ kosɛbɛ.

  1. Nafa suguyaw ka fisa ni ɲɛfɔli suguyaw ye kan bɛ u dɛmɛ yɔrɔ min na . C# kɔnɔ, baara kɛli ni struct ye class nɔ na fɛn misɛnninw kama, minnu bɛ dabɔ tuma caman, o b’u to kulu kan. Go kɔnɔ, ka struct misɛnninw tɛmɛ ni nafa ye sanni ka tɛmɛ ni pointer ye, o bɛ o nɔ kelen sɔrɔ.
  2. Aw kana tila-tila sirilenw kɔnɔ . Aw bɛ bufaw tila ka kɔn ani ka baara kɛ n’u ye kokura iterasiyɔnw bɛɛ kɔnɔ . N’i mago bɛ waati dɔɔnin slice walima array la loop kɔnɔ min bɛ boli siɲɛ 100.000, i k’a tila siɲɛ kelen ka kɔn loop ɲɛ k’a lasegin iterasiyɔn kelen-kelen bɛɛ kan.
  3. Ka baara kɛ ni fɛnw dalajɛli ye fɛnw kama minnu bɛ dabɔ tuma caman na ani minnu bɛ tiɲɛ. Donanw ka jɛɲɔgɔnya kuluw ye misali klasiki ye, nka misali bɛ tali kɛ cogo kelen na HTTP ɲinini fɛnw na, seriyali bufaw la, ani jatebɔ sigida structs.
  4. Profile sanni ka ɲɛ. Baarakɛminɛn minnu bɛ i n’a fɔ Go ka pprof, Java ka async-profiler, walima PHP ka Blackfire bɛ se ka jatebɔw kɛ yɔrɔ min na tigitigi. Ka ɲɛtaa kɛ k’a sɔrɔ i ma kunnafonidilanw kɛ, o bɛ farati lase i ma ka cɛsiri kɛ sira nɛnɛmaw kan minnu man teli ka kɛ.
  5. Arena allocators leverage for batch operations. Ni aw bɛ sɛbɛnw kulu dɔ baara — i n’a fɔ ka fatura 500 dilan walima ka contact 10.000 don — arena allocator bɛ hakilijagabɔ bloki belebele kelen minɛ k’a parsela ka bɔ ni teliya ye min bɛ i n’a fɔ stack, o kɔfɛ a bɛ bloki bɛɛ hɔrɔnya siɲɛ kelen ni batch dafara.

o fɛɛrɛ ninnu tɛ hakilinata dɔrɔn ye . Ni SaaS jɔyɔrɔw bɛ baara lakikaw ɲɛnabɔ — jagokɛla fitinin dɔ min bɛ kalo o kalo faturaw dilan, HR ɲɛmɔgɔ min bɛ baarakɛla 200 ka sarako ɲɛnabɔ, jagokɛjɛkulu min bɛ kanpaɲi baarakɛcogo sɛgɛsɛgɛ siraw bɛɛ kɔnɔ — hakilijagabɔ kɛcogo ɲuman nɔ min bɛ sɔrɔ ɲɔgɔn fɛ, o ye ko ye min bɛ teliya, min bɛ jaabi di, baarakɛlaw bɛ min miiri hali n’u ma miiri abada min bɛ kɛ a jukɔrɔ.

Porozɛ minnu bɛ baarakɛcogo dɔn , olu jɔli sɛgɛsɛgɛli la

Stack allocation ye baarakɛcogo puzzle dɔ ye min ka bon kosɛbɛ , nka a ye jusigilan ye . Hakilila bɛ baara kɛ cogo min na duguma, o faamuyali bɛ hakili misaliw di ɛntɛrinɛti kalanbagaw ma, u mago bɛ minnu na walasa ka latigɛ ɲumanw kɛ kulu kɔnɔ — k’a ta kunnafonidilanw sugandili la ani APIw dilanni na ka se fɛnsɔrɔsiraw labɛnni ma ani ka nafolo dan sigi baarakɛminɛnw kɔnɔ minnu bɛ kɛ minɛn kɔnɔ.

Jagokɛlaw minnu bɛ u jigi da platformuw kan i n’a fɔ Mewayz walasa k’u ka don o don baara kɛ, o injiniyɛri latigɛ ninnu sara bɛ ye : ɲɛw doni teliya, jɛɲɔgɔnya nɔgɔya, ani dannaya min b’a la ko sistɛmu tɛna tiɲɛ doni caman kɔrɔ Ni jatebɔ modulu dɔ mago bɛ ka sɔrɔli lajɛ kalandriya tan ni caman kɔnɔ waati yɛrɛ la, walima ni jateminɛ dakun dɔ bɛ kunnafoniw lajɛ jagokɛyɔrɔ caman kɔnɔ, hakilijagabɔ fɛɛrɛ min bɛ a kɔnɔ, o nafa ka bon ka tɛmɛ baarakɛla fanba bɛna min dɔn.

porogaramu ɲuman bɛ a ye ko cɛsiri tɛ a la ka baara kɛ ni a ye tigitigi bawo a dabɔbagaw ye sumaya kɛ kunnafoni fitininw na minnu bɛ to yebali ye. Stack allocation — teliya, latigɛlen, ani cɛɲi a nɔgɔya la — ye o kunnafoni fitininw dɔ ye min nafa ka bon ka faamuya kosɛbɛ, hali n’i bɛ i ka porogaramu fɔlɔ sɛbɛn walima n’i bɛ ka plateforme dɔ jɔ min bɛ baara kɛ jagokɛla ba caman ye diɲɛ kɔnɔ.

Ɲininkali minnu bɛ kɛ tuma caman na

stake tilali ye mun ye ani mun na a nafa ka bon ?

Stack allocation ye hakilijagabɔ ɲɛnabɔli fɛɛrɛ ye min kɔnɔ kunnafoniw bɛ mara don laban , bɔli fɔlɔ sigicogo la min bɛ ɲɛnabɔ a yɛrɛma porogaramu ka waleyali taabolo fɛ . A nafa ka bon bawo stack-allocated memory bɛ teliya kosɛbɛ ka tɛmɛ heap allocation kan — nɔgɔbɔlan tɛ yen sanfɛ, fragmentation tɛ yen, wa deallocation bɛ kɛ yɔrɔnin kelen ni baarakɛcogo dɔ seginna. Baarakɛcogo-kɔrɔ-baarakɛminɛnw kama, stack tilatilali faamuyali bɛ se ka dɔ bɔ kosɛbɛ latency la ani ka baarakɛcogo ɲɛ.

ne ka kan ka baara kɛ ni stack allocation ye tuma jumɛn ka tɛmɛ heap allocation kan ?

Ka baara kɛ ni stack allocation ye fɛn misɛnninw na, minnu tɛ mɛn, ni u bonya dɔnna u dabɔ waati la — i n’a fɔ sigida jateden dafalenw, structs, ani fixed-size arrays. Heap tilatilali bɛnnen don kosɛbɛ kunnafonidilanbaw ma, dalajɛ minnu bonya bɛ se ka wuli, walima fɛn minnu ka kan ka ɲɛnamaya ka tɛmɛ baarakɛcogo kan min y’u da. Sariya jɔnjɔn : ni kunnafonidilanw ka ɲɛnamaya waati bɛ bɛn baarakɛcogo hakɛ ma ani n’a bonya bɛ se ka fɔ ka ɲɛ, a bɛ se ka fɔ ko stack ye sugandili teliyalen ye tuma bɛɛ.

yala stack overflow filiw bɛ se ka bali sɛnɛko baarakɛminɛnw na wa ?

Ɔwɔ , stack overflow filiw bɛ se ka bali ni injiniyɛri kɛcogo kololenw ye . Aw ye aw yɛrɛ tanga kɔsegin juguman walima dan tɛ min na, ka dan sigi sigida fɛn caman sɛgɛsɛgɛli la, ani ka baara kɛ ni algorisimu iteratifw ye yɔrɔ minnu na a bɛ se ka kɛ. Kanw ni baarakɛminɛnw fanba b’a To i bɛ se ka stack hakɛ dantigɛliw Labɛn. Kɔlɔsili baarakɛminɛnw ni sigida ɲɛnabɔcogo i n’a fɔ Mewayz, n’o ye jagokɛla ka OS ye min bɛ se ka kɛ ni modulu 207 ye, n’a bɛ daminɛ $19/mo la, o bɛ se ka ekipuw dɛmɛ ka baarakɛminɛnw kɛnɛya lajɛ ani ka baarakɛcogo kɔseginw minɛ joona.

Yala bi kanw bɛ nafa sɔrɔ hali bi stake tilali la wa ?

A bɛrɛbɛrɛ. Hali kan minnu ka baarakɛwaati ɲɛnabɔlen don — i n’a fɔ Go, Rust, C# ani Java — olu bɛ boli sɛgɛsɛgɛli kɛ walasa k’a dɔn ni fɛn caman bɛ se ka kɛ stack-allocated sanni ka heap-allocated. Rust bɛ stack-first allocation wajibiya a ka ownership model fɛ, wa Go ka compiler bɛ a ɲɛnabɔ ni fanga ye. O mekanikiniw faamuyali bɛ baarakɛlaw dɛmɛ u ka kodɔn sɛbɛn minnu daɲɛgafew bɛ se ka minnu ɲɛnabɔ ka ɲɛ, o bɛ na ni hakilijagabɔ baara dɔgɔyali ye ani waleyali waati teliya.