Id-dar > Wirja > Il-kontenut

Reġistru tal-wiri jew struttura tad-dejta, biex jillokalizza l-frejms tal-munzelli ta 'funzjonijiet imsejjes fil-programmazzjoni tal-kompjuter

Apr 22, 2017

Sejħa stack

Fix -xjenza tal-kompjuter , ċellola ta 'sejħiet hija struttura ta' data ta ' munzell li taħżen informazzjoni dwar is- subutinijiet attivi ta' programm tal- kompjuter . Dan it-tip ta 'munzell huwa magħruf ukoll bħala munzell ta' eżekuzzjoni , munzell ta ' programmi , munzell ta' kontroll , munzell run-time , jew magna stack , u spiss jitqassar għal sempliċement "il-munzell". Għalkemm il-manutenzjoni tal-munzell tas-sejħiet hija importanti għall-funzjonament tajjeb tal-biċċa l-kbira tas-softwer , id-dettalji normalment ikunu moħbija u awtomatiċi f'lingwi ta 'programmar ta' livell għoli . Ħafna settijiet ta 'struzzjonijiet tal- kompjuter jipprovdu struzzjonijiet speċjali għall-manipulazzjoni ta' munzelli.

Ċumnija ta 'sejħiet tintuża għal diversi skopijiet relatati, iżda r-raġuni ewlenija għaliex wieħed għandu jżomm rendikont tal-punt li għalih kull subrutina attiva għandha tirritorna l-kontroll meta tispiċċa l-eżekuzzjoni. Sotto-linja attiva hija waħda li ġiet imsejħa imma għadha trid tlesti l-eżekuzzjoni u wara dan il-kontroll għandu jingħata lura sal-punt ta 'sejħa. Dawn l-attivazzjonijiet tas-subutli jistgħu jiġu naddizzati għal kull livell (recursive bħala każ speċjali), għalhekk l-istruttura tal-munzell. Jekk, pereżempju, subordinat DrawSquare jsejjaħ subordinat DrawLine minn erba 'postijiet differenti, DrawLine għandha tkun taf fejn trid tirritorna meta titlesta l-eżekuzzjoni tagħha. Biex twettaq dan, l- indirizz wara l- istruzzjoni tas-sejħa, l- indirizz tar - ritorn , huwa mbuttat fuq is-sejħa ta 'munzell ma' kull sejħa.


Werrej

[ Hide ]


Deskrizzjoni [ editja ]

Peress li l-munzell tas-sejħiet huwa organizzat bħala munzell , min iċempel imbotta l-indirizz tar-ritorn fuq il-munzell, u s-subrutina imsejħa, meta tispiċċa, tiġbed jew toħroġ l -indirizz tar-ritorn 'il barra mis-sejħa ta' munzell u tittrasferixxi l-kontroll għal dak l-indirizz. Jekk subordinat imsejjaħ isejjaħ subutut ieħor, imbotta indirizz ta 'ritorn ieħor fuq il-munzell tas-sejħiet, u l-bqija, bl-informazzjoni li tinġibed u tieqaf kif jiddetta l-programm. Jekk l-imbuttar jikkonsma l-ispazju kollu allokat għall-munzell tas-sejħiet, jinħoloq żball imsejjaħ overflow ta 'stack , ġeneralment jikkawża li l-programm jinqabad . Iż-żieda tad-dħul ta 'subroutine fil-munzell tas-sejħiet kultant tissejjaħ "stralċ"; Bil-maqlub, it-tneħħija ta 'l-iskrizzjonijiet hija "tħollija".

Normalment ikun hemm eżattament stacking wieħed assoċjat ma 'programm ta' tħaddim (jew b'mod aktar preċiż, ma 'kull kompitu jew ħajt ta' proċess ), għalkemm jistgħu jinħolqu stacks addizzjonali għall - immaniġġjar tas-sinjal jew multitarea kooperattiva (bħal fil-kuntest sett ). Peress li hemm biss wieħed f'dan il-kuntest importanti, jista 'jissejjaħ il - munzell (impliċitament, "tal-kompitu"); Madankollu, fil- lingwa ta 'programmar Forth, il -munzell tad - dejta jew il- munzell tal- parametri huwa aċċessibbli b'mod aktar espliċitu mill-munzell tas-sejħiet u komunement jissejjaħ il - munzell (ara hawn taħt).

Fil -lingwi ta 'programmar ta' livell għoli , l-ispeċifiċitajiet tas-sejħa ta 'munzelli ġeneralment ikunu moħbija mill-programmer. Huma jingħataw aċċess biss għal sett ta 'funzjonijiet, u mhux il-memorja fuq il-munzell innifsu. Dan huwa eżempju ta ' estrazzjoni . Il - biċċa l - kbira tal-lingwi tal-assemblea , min-naħa l-oħra, jeħtieġu li l-programmaturi jkunu involuti fil-manipulazzjoni tal-munzell. Id-dettalji attwali tal-munzell f'lingwa ta 'programmar jiddependu fuq il- kompilatur , is-sistema operattiva u s- sett ta' istruzzjoni disponibbli.

Funzjonijiet tas-sejħa tal-munzell [ editja ]

Kif innutat hawn fuq, l-iskop primarju ta 'stack call huwa li jaħżen l-indirizzi tar-ritorn . Meta jissejjaħ sub-reklutaġġ, il-post (indirizz) ta 'l-istruzzjoni li fiha jista' jerġa 'jibda aktar tard jeħtieġ li jiġi ffrankat x'imkien. L-użu ta 'munzell biex isalva l-indirizz tar-ritorn għandu vantaġġi importanti fuq konvenzjonijiet ta' sejħiet alternattivi. Waħda hija li kull kompitu jista 'jkollu munzell tiegħu stess, u għalhekk is-subrutina tista' terġa 'tiddaħħal, jiġifieri tista' tkun attiva simultanjament għal ħidmiet differenti li jagħmlu affarijiet differenti. Benefiċċju ieħor huwa li r- rikursjoni hija appoġġjata awtomatikament. Meta funzjoni titlob ruħha b'mod rikurrenti, l-indirizz tar-ritorn irid jinħażen għal kull attivazzjoni tal-funzjoni sabiex ikun jista 'jintuża aktar tard biex jirritorna mill-attivazzjoni tal-funzjoni. L-istrutturi tal-munzelli jipprovdu din il-kapaċità awtomatikament.

Skont il-lingwa, is-sistema operattiva u l-ambjent tal-magna, stack call jista 'jservi skopijiet addizzjonali, inkluż pereżempju:

Ħażna ta 'dejta lokali


Subutina ta 'spiss teħtieġ spazju tal-memorja għall-ħażna tal-valuri tal -varjabbli lokali , il-varjabbli li huma magħrufa biss fis-subrutina attiva u ma jżommux il-valuri wara li jirritorna. Ħafna drabi jkun konvenjenti li jiġi allokat spazju għal dan l-użu billi sempliċiment tiċċaqlaq il-parti ta 'fuq tal-munzell bi biżżejjed biex tipprovdi l-ispazju. Dan huwa mgħaġġel ħafna meta mqabbel ma 'l-allokazzjoni tal-memorja dinamika , li tuża l- ispazju ta' munzelli . Innota li kull attivazzjoni separata ta 'sub-rettina tikseb l-ispazju separat tagħha stess fil-munzell għall-lokal.


Parametru li jgħaddi


Is-Subutini ħafna drabi jeħtieġu li l-valuri għall- parametri jiġu pprovduti lilhom bil-kodiċi li jsejħilhom, u mhux komuni li spazju għal dawn il-parametri jista 'jiġi stabbilit fil-munzell tas-sejħiet. Ġeneralment, jekk ikun hemm biss ftit parametri żgħar, se jintużaw reġistri tal-proċessuri biex jgħaddu l-valuri, imma jekk ikun hemm aktar parametri milli jistgħu jiġu mmaniġġjati b'dan il-mod, ikun hemm bżonn ta 'spazju tal-memorja. Il-munzell tas-sejħiet jaħdem tajjeb bħala post għal dawn il-parametri, speċjalment peress li kull sejħa għal subutest, li se jkollha valuri differenti għal parametri, tingħata spazju separat fuq il-munzell tas-sejħa għal dawk il-valuri.


Munzell ta 'l-evalwazzjoni


Operands għal operazzjonijiet aritmetiċi jew loġiċi ħafna drabi jidħlu f'reġistri u jitħaddmu hemm. Madankollu, f'xi sitwazzjonijiet l-operandi jistgħu jinqalbu sa fond arbitrarju, li jfisser li għandha tintuża xi ħaġa iktar minn reġistri (dan huwa l-każ tar- reġistru tat -tixrid ). Il-munzelli ta 'dawn l-operaturi, pjuttost bħal dak f'skalkatur RPN , jissejħu munzell ta' evalwazzjoni, u jistgħu jokkupaw spazju fil-munzell tas-sejħiet.


Pointer għall-istanza kurrenti


Xi lingwi orjentati lejn l-oġġett (eż., C + + ), jaħżnu dan l- indikatur flimkien ma 'argumenti tal-funzjoni fil-munzell tas-sejħa meta jinqdew il-metodi. Dan il- pointer juri l- istanza tal- oġġett assoċjata mal-metodu li se jiġi invokat.


Inluq il-kuntest tas-subrutina


Xi lingwi ta 'programmar (eż., Pascal u Ada ) jappoġġaw id-dikjarazzjoni ta ' sub-rutini nested , li huma permessi li jaċċessaw il-kuntest tar-rutini li jagħlqu, jiġifieri, parametri u varjabbli lokali fl-ambitu tar-rutini ta 'barra. Taqbeż statiku bħal dan jista 'jirrepeti - funzjoni ddikjarata f'funzjoni ddikjarata f'funzjoni ... L-implimentazzjoni għandha tipprovdi mezz li bih funzjoni msejħa fi kwalunkwe livell ta' nest statiku partikolari tista 'tirreferi l-qafas li jgħaqqad f'kull livell ta' nesting li jtemm. Komunement din ir-referenza hija implimentata minn pointer għall-qafas ta 'l-istanza l-aktar riċenti attivata tal-funzjoni li tagħlaq, imsejħa "link downstack" jew "link statiku", biex tiddistingwiha mil- "rabta dinamika" li tirreferi għal min iċempel immedjatament Li m'għandhomx għalfejn ikunu l-funzjoni parentali statika).


Minflok rabta statika, ir-referenzi għall-frames statiċi li jagħlqu jistgħu jinġabru f'varjetà ta 'indikaturi magħrufa bħala wirja li hija indiċjata biex issib qafas mixtieq. Il-fond tal-ħabi lexiku ta 'rutina huwa kostanti magħruf, għalhekk id-daqs tal-wiri ta' rutina huwa ffissat. Ukoll, in-numru ta 'ambiti li fihom travers huwa magħruf, l-indiċi fil-wirja huwa wkoll iffissat. Normalment il-wirja ta 'rutina tinsab fil-qafas tal-munzell tagħha stess, iżda l- Burroughs B6500 implimenta display bħal dan f'ħardwer li appoġġja sa 32 livell ta' nesting statiku.


L-iskrizzjonijiet tal-wiri li jindikaw li fihom l-ambiti huma miksuba mill-prefiss xieraq tal-wiri ta 'min iċempel. Rutina ta 'ġewwa li tirrikorri toħloq frejms ta' sejħiet separati għal kull invokazzjoni. F'dan il-każ, ir-rabtiet statiċi kollha tar-rutina ta 'ġewwa jindikaw l-istess kuntest ta' rutina ta 'barra.


Stat ieħor ta 'ritorn


Minbarra l-indirizz tar-ritorn, f'xi ambjenti jista 'jkun hemm stati oħra tal-magni jew tas-softwer li jeħtieġu li jiġu rrestawrati meta s-subroutine jirritorna. Dan jista 'jinkludi affarijiet bħal livell ta' privileġġ, informazzjoni dwar l-immaniġġjar ta 'eċċezzjonijiet, modi aritmetiċi, eċċ. Jekk ikun hemm bżonn, dan jista 'jinħażen fil-munzell tas-sejħa hekk kif l-indirizz tar-ritorn ikun.


Il-munzell tas-sejħiet tipiku jintuża għall-indirizz tar-ritorn, lokal, u parametri (magħrufin bħala qafas ta 'sejħa ). F'xi ambjenti jista 'jkun hemm aktar jew anqas funzjonijiet assenjati għall-munzell tas-sejħiet. Fil- lingwa ta 'programmar Forth , per eżempju, normalment biss l-indirizz tar-ritorn, parametri u indiċijiet tal-linja magħduda u possibilment varjabbli lokali jinħażnu fuq il-munzell tas-sejħiet (għalkemm f'dik l-ambjent jissejjaħ il- munzell tar - ritorn ) Hemm bl-użu ta 'kodiċi speċjali ta' ġestjoni tar-ritorn tal-munzelli sakemm il-ħtiġijiet ta 'sejħiet u prospetti jiġu rispettati; Il-parametri huma ordinarjament maħżuna fuq stack ta 'data separata jew munzell ta' parametri , tipikament jissejħu l - munzell f'terminoloġija terminali anki jekk hemm stack ta 'sejħiet minħabba li s-soltu hija aċċessata b'mod aktar espliċitu. Xi Forths għandhom ukoll it-tielet munzell għall - parametri tal- punt li jżommu f'wiċċ l-ilma .

Struttura [ editja ]

Stabbiliment ta 'stack tas-sejħa

Ċumnija ta 'sejħiet hija magħmula minn frames stack (imsejħa wkoll rekords ta' attivazzjoni jew frejms ta 'attivazzjoni ). Dawn huma strutturi ta 'data dipendenti fuq il-magna u dipendenti fuq l - ABI li fihom informazzjoni dwar l-istat ta' subroutina. Din id-dejta xi kultant tissejjaħ CFI (Sejħa ta 'Informazzjoni ta' Qafas). [1] Kull qafas ta 'munzell jikkorrispondi għal sejħa għal subordinazzjoni li għadha ma tlestitx b'ritorn. Per eżempju, jekk is-subutine jissejjaħ DrawLine bħalissa għaddej, wara li ġie msejjaħ minn sub- DrawSquare , il-parti ta 'fuq tas-sejħa tista' tiġi stabbilita bħal fl-istampa fuq il-lemin.

Dijagramma bħal din tista 'tinġibed f'kull direzzjoni sakemm it-tqegħid tal-quċċata, u għalhekk id-direzzjoni tat-tkabbir tal-munzell, tinftiehem. Barra minn hekk, indipendentement minn dan, l-arkitetturi jvarjaw dwar jekk il-munzelli tas-sejħiet jikbrux għal indirizzi ogħla jew lejn indirizzi aktar baxxi. Il-loġika tad-dijagramma hija indipendenti mill-għażla ta 'l-indirizzar.

Il-qafas tal-munzell fuq in-naħa ta 'fuq tal-munzell huwa għar-rutina li teżegwixxi bħalissa. Il-qafas tal-munzell ġeneralment jinkludi ta 'l-inqas l-oġġetti li ġejjin (f'forma ta' push):

  • L-argumenti (il-valuri tal-parametri) għadda għar-rutina (jekk hemm);

  • L-indirizz tar-ritorn lura lis-sejjieħ ta 'rutina (eż. Fil-qafas tal-munzell DrawLine , indirizz fil- DrawSquare ' DrawSquare ); U

  • Spazju għall-varjabbli lokali tar-rutina (jekk ikun hemm).

Stack and frame pointers [ editja ]

Meta d-daqsijiet tal-qafas tal-munzelli jistgħu jkunu differenti, bħal bejn funzjonijiet differenti jew bejn invokazzjonijiet ta 'funzjoni partikolari, popping qafas mill-munzell ma jikkostitwixxix tnaqqis fiss tal- pointer tal- munzell . Fir-ritorn tal-funzjoni, minflok il- pointer tal-munzell jerġa 'jinġieb għall- pointer tal-qafas , il-valur tal-pointer tal-munzell eżatt qabel ma tissejjaħ il-funzjoni. Kull qafas ta 'munzell fih pointer fuq il-quċċata tal-qafas immedjatament hawn taħt. Il-pointer stacker huwa reġistru mutabbli maqsum bejn l-invokazzjonijiet kollha. Il-pointer tal-qafas ta 'invokazzjoni partikolari ta' funzjoni huwa kopja tal-pointer tal-munzell kif kien qabel ma ġiet invokata l-funzjoni. [2]

Il-postijiet tal-oqsma l-oħra kollha fil-qafas jistgħu jiġu definiti relattivament jew mal-quċċata tal-qafas, bħala kumpens negattiv tal-pointer tal-munzell, jew relattiv mal-quċċata tal-qafas hawn taħt, bħala kumpens pożittiv tal-pointer tal-qafas. Il-post tal-pointer tal-qafas innifsu għandu jiġi definit bħala kumpens negattiv tal-pointer tal-munzell.

Kif taħżen l-indirizz għall-qafas ta 'min iċempel [ editja ]

Fil-biċċa l-kbira tas-sistemi qafas ta 'munzell għandu qasam li fih il-valur preċedenti tar-reġistru tal-pointer tal-qafas, il-valur li kellu waqt li l-persuna li qed tagħmel iċempel kienet qed teżegwixxi. Pereżempju, il-qafas tal-munzell ta ' DrawLine jkollu post ta' memorja li jkollu l-valur tal-pointer tal-qafas li tuża DrawSquare (mhux murija fid-dijagramma t'hawn fuq). Il-valur jiġi ffrankat mad-dħul fis-subutina u rrestawrat bir-ritorn. Wara li tali qasam f'post magħruf fil-qafas tal-munzell jippermetti li l-kodiċi taċċessa kull frame suċċessivament taħt il-qafas tar-rutina li teżegwixxi bħalissa, u tippermetti wkoll li r-rutina terġa 'tirrestawra faċilment il-pointer tal-qafas għall-qafas tas- sejjieħ , eżatt qabel ma terġa' lura.

Rutini imqassma leġikament [ editja ]

Aktar tagħrif: Funzjoni mhallta u Varjabbli mhux lokali

L-ilsna ta 'programmazzjoni li jappoġġaw sub-rutini nested għandhom ukoll qasam fil-qafas tas-sejħa li jindika l-qafas tal-munzell ta' l- aħħar attivazzjoni tal-proċedura li tgħaqqad mill-qrib il-kalmi, jiġifieri l- ambitu immedjat tal-kalmi. Din tissejjaħ rabta ta 'aċċess jew konnessjoni statika (billi żżomm rekord ta' nesting statiku waqt sejħiet dinamiċi u rikurrenti) u tipprovdi r-rutina (kif ukoll kwalunkwe rutina oħra li tista 'tinvoka) aċċess għad-data lokali tar-rutini inkapsulanti tagħha f'kull nesting Livell. Xi arkitetturi, kompilaturi, jew każijiet ta 'ottimizzazzjoni jaħżnu rabta waħda għal kull livell ta' għeluq (mhux biss it-tluq immedjat), sabiex rutini mdaħħla sewwa li jaċċessaw informazzjoni baxxa m'għandhomx għalfejn jaqsmu bosta links; Din l-istrateġija spiss tissejjaħ "wiri". [3]

Il-konnessjonijiet tal-aċċess jistgħu jiġu ottimizzati 'l bogħod meta funzjoni ta' ġewwa ma taċċessax data lokali (mhux kostanti) fl-inkapsulament, bħal fil-każ ta 'funzjonijiet puri li jikkomunikaw biss permezz ta' argumenti u valuri ta 'ritorn, per eżempju. Xi kompjuters storiċi, bħas- sistemi kbar Burroughs , kellhom "reġistri tal-wiri" speċjali biex jappoġġaw funzjonijiet imsejjes, filwaqt li compilers għal ħafna magni moderni (bħall-x86 kullimkien) sempliċement jirriservaw ftit kliem fuq il-munzell għall-indikaturi, kif meħtieġ.

Overlap [ editja ]

Għal xi skopijiet, il-qafas tal-munzell ta 'subordinazzjoni u dak tal-persuna li qed iċempel jista' jitqies li jikkoinċidi, il-koinċidenza li tikkonsisti fiż-żona fejn il-parametri jgħaddu minn min iċempel sal-kalye. F'xi ambjenti, min iċempel imur kull argument fuq il-munzell, u b'hekk jestendi l-qafas tal-munzell tiegħu, imbagħad jinvoka l-kalma. F'ambjenti oħra, min iċempel għandu żona preallokata fil-quċċata tal-qafas tal-munzell tiegħu biex iżomm l-argumenti li jipprovdi għal subutini oħra li jitlob. Xi drabi din iż-żona tissejjaħ l -ispazju ta 'l-argumenti li jkun għadu għaddej jew iż-żona ta' spiss Taħt dan l-approċċ, id-daqs taż-żona huwa kkalkulat mill-kumpilatur bħala l-akbar wieħed meħtieġ minn kwalunkwe subordinat imsejjaħ.

Uża [ editja ]

Ipproċessar tas-sit ta 'sejħa [ editja ]

Normalment il-manipulazzjoni tas-sejħiet tal-munzelli meħtieġa fil-post ta 'sejħa għal subutineja hija minima (li hija tajba peress li jista' jkun hemm ħafna siti ta 'sejħiet għal kull subrutina li għandha tissejjaħ). Il-valuri għall-argumenti attwali huma evalwati fis-sit tas-sejħa, peress li huma speċifiċi għas-sejħa partikolari, u jew imbuttati fuq il-munzell jew imqiegħda f'reġistri, kif determinat mill- konvenzjoni li tintuża. L-istruzzjoni tas-sejħa attwali, bħal "fergħa u rabta", hija mbagħad tipikament esegwita biex tittrasferixxi l-kontroll għall-kodiċi tas-subutrina fil-mira.

Ipproċessar ta 'dħul fis-sistema ta' dħul [ editjar ]

Fis-subregola imsejħa, l-ewwel kodiċi eżegwit ġeneralment jissejjaħ il- preforn tas-subrutina , peress li jagħmel it-tindif meħtieġ qabel ma jibda l-kodiċi għad-dikjarazzjonijiet tar-rutina.

Il-prologu normalment se jiffranka l-indirizz tar-ritorn li jkun fadal f'reġistru bl-istruzzjoni tas-sejħa billi jimbotta l-valur fuq il-munzell tas-sejħiet. Bl-istess mod, il-pointer tal-munzell attwali u / jew il-valuri tal-pointer tal-qafas jistgħu jiġu mbuttati. Alternattivament, xi arkitetturi stabbiliti ta 'istruzzjonijiet awtomatikament jipprovdu funzjonalità komparabbli bħala parti mill-azzjoni tal-istruzzjoni tas-sejħa nnifisha, u f'ambjent bħal dan il-preforn ma għandux għalfejn jagħmel dan.

Jekk qed jintużaw l-indikaturi tal-qafas, il-preforn tipikament jistabbilixxi l-valur il-ġdid tar-reġistru tal-pointer tal-qafas mill-pointer tal-munzell. L-ispazju fuq il-munzell għal varjabbli lokali jista 'mbagħad jiġi allokat billi jinbidel b'mod inkrimentali l-pointer tal-munzell.

Il -lingwa ta 'programmar Forth tippermetti l-istralċ espliċitu tal-munzell tas-sejħiet (imsejħa hemm "il-munzell tar-ritorn").

L-ipproċessar tar-ritorn [ editja ]

Meta sotto-reina hija lesta biex tirritorna, hija tesegwixxi epilogu li jneħħi l-passi tal-prologu. Dan normalment jerġa 'jġib il-valuri rreġistrati ffrankati (bħall-valur tal-pointer tal-qafas) mill-qafas tal-munzell, poġġi l-istruttura sħiħa tal-munzell barra mill-munzell billi tbiddel il-valur tal-pointer tal-munzell u fl-aħħar tibgħat lill-istruzzjoni fl-indirizz tar-ritorn. Taħt bosta konvenzjonijiet ta 'sejħa l-oġġetti li tfaċċaw il-munzell mill-epilogu jinkludu l-valuri ta' l-argument oriġinali, f'liema każ ġeneralment ma jkunx hemm aktar manipulazzjonijiet ta 'munzelli li jeħtieġ li jsiru minn min iċempel. Madankollu, b'xi konvenzjonijiet ta 'sejħa, hija r-responsabbiltà ta' min iċempel li tneħħi l-argumenti miċ-ċumnija wara r-ritorn.

Nieqes [ editja ]

Meta tirritorna mill-funzjoni msejħa, se tinfetaħ il-kwadru ta 'fuq tal-munzell, forsi jitlaq il-valur tar-ritorn. L-att aktar ġenerali li wieħed jimmarka frejm wieħed jew aktar mill-munzell biex jerġa 'jibda l-eżekuzzjoni x'imkien ieħor fil-programm jissejjaħ stack unwinding u għandu jsir meta jintużaw strutturi ta' kontroll mhux lokali, bħal dawk użati għal handling ta 'eċċezzjoni . F'dan il-każ, il-qafas ta 'munzell ta' funzjoni fih entrata waħda jew aktar li tispeċifika l-handlers ta 'eċċezzjoni. Meta tinħareġ eċċezzjoni, il-munzell jinħall sakemm jinstab maniljatur li huwa lest biex jimmaniġġja (qabda) it-tip ta 'l-eċċezzjoni mormija.

Xi lingwi għandhom strutturi oħra ta 'kontroll li jeħtieġu tħollija ġenerali. Pascal jippermetti dikjarazzjoni GLO globali biex tittrasferixxi l-kontroll minn funzjoni imsejjes u f'funzjoni esterna invokata qabel. Din l-operazzjoni teħtieġ li l-munzell jinħall, waqt li jitneħħew kemm il-frejms tal-munzelli kif meħtieġ biex jerġa 'jkun il-kuntest xieraq biex jittrasferixxi l-kontroll għad-dikjarazzjoni fil-mira fil-funzjoni esterna li tagħlaq. Bl-istess mod, C għandu l-funzjonijiet longjmp u longjmp li jaġixxu bħala gotos mhux lokali. Lisp Komuni jippermetti l-kontroll ta 'x'jiġri meta l-munzell jinħall bl-użu tal-operatur speċjali unwind-protect -unwind.

Meta tapplika kontinwazzjoni , il-munzell (loġikament) jinħall u mbagħad jerġa 'jiġi mdawwar bil-munzell tal-kontinwazzjoni. Dan mhux l-uniku mod biex jiġu implimentati l-kontinwazzjonijiet; Per eżempju, bl-użu ta 'stacks espliċiti multipli, l-applikazzjoni ta' kontinwazzjoni tista 'sempliċement attivata l-munzell tagħha u r-riħ valur li jrid jgħaddi. Il -lingwa tal-ipprogrammar tal-Iskema tippermetti thunks arbitrarji li jiġu eżegwiti f'punti speċifikati fuq "tħollija" jew "rebbieħa" tal-munzell tal-kontroll meta tiġi invokata kontinwazzjoni.

Spezzjoni [ editja ]

Ara wkoll: Profiling (ipprogrammar tal-kompjuter)

Il-munzell tas-sejħiet kultant jista 'jiġi spezzjonat hekk kif il-programm ikun qed jaħdem. Skont kif il-programm huwa miktub u kkompilat, l-informazzjoni fuq il-munzell tista 'tintuża biex tiddetermina l-valuri intermedji u t-traċċi tat-telefonati tal-funzjoni. Dan intuża biex jiġġenera testijiet awtomatizzati ta 'qamħa fina [4] u f'każijiet bħal Ruby u Smalltalk, biex jimplimentaw kontinwazzjonijiet ta' l-ewwel klassi. Bħala eżempju, il- GNU Debugger (GDB) jimplimenta spezzjoni interattiva tas-sejħa tal-munzell ta 'programm Ċ, iżda paulat, C. [5]

It-teħid ta 'kampjuni ta' ħin regolari tal-munzell tas-sejħiet jista 'jkun utli fit-tfassil tal-profil tal-programmi, minħabba li ħafna drabi l-indikatur tas-subroutine jidher fuq id-data tal-kampjunar.

Sigurtà [ editja ]

L-Artikolu prinċipali: Tkissir ta 'buffer stack

F'lingwa b'pointers b'xejn jew bi frekwenza mhux ikkontestata jikteb (bħal f'C), it-taħlit tad-dejta tal-fluss tal-kontroll li taffettwa l-eżekuzzjoni tal-kodiċi (l-indirizzi tar-ritorn jew il-indikaturi tal-qafas ffrankati) u dejta sempliċi tal-programm (parametri jew valuri ta 'ritorn ) F'munzell ta 'sejħiet huwa riskju ta' sigurtà, possibbilment sfruttat permezz ta ' tifwir ta' munzell ta 'munzelli bħala l-aktar tip komuni ta' tifwir ta ' buffer .

Waħda minn dawn l-attakki tinvolvi l-mili ta 'buffer wieħed b'kodiċi eżekutibbli arbitrarju, u mbagħad tħoll l-istess buffer jew xi buffer ieħor biex jissostitwixxi xi indirizz tar-ritorn b'valur li jindika direttament il-kodiċi eżekutibbli. Bħala riżultat, meta l-funzjoni tmur lura, il-kompjuter tesegwixxi dak il-kodiċi. Dan it-tip ta 'attakk jista' jiġi faċilment imblukkat b'W ^ X. [ Ċitazzjoni meħtieġa ] Attakki simili jistgħu jirnexxu anke bil-protezzjoni W ^ X attivata, inkluż l -attakk lura lejn libc jew l-attakki li ġejjin minn programmazzjoni orjentata lejn ir-ritorn . Ġew proposti diversi mitigazzjonijiet, bħall-ħażna ta 'arranġamenti f'post separat kompletament mill-munzell tar-ritorn, bħalma hu l-każ fil-lingwa ta' programmar Forth. [6]