Saltu al enhavo

Plenumstako

El Vikipedio, la libera enciklopedio

En komputadoj, plenumstako[1] estas stako en kiu dum rulado de komputila programo estas registrataj la datumoj pri la subprogramoj kaj diversaj traktiloj aktivaj je koncerna tempopunkto.

Kvankam la tenado de la plenumstako estas grava parto de programplenumo, tamen por uzanto de altnivelaj programlingvoj ĝi ne estas perceptebla, ĉar farata aŭtomate.

Plenumstako servas por pluraj interrilataj celoj, el kiuj speciale atentinda estas tenado de revenadresoj. Revenadreso estas la punkto kien vokita subprogramo devas redoni la stirfluon post sia normala finiĝo. Voko de subprogramo P kreas «aktivan ekzempleron» de P; kiam la plenumo de tiel vokita subprogramo finiĝas, la de ĝi kreita aktivaĵo detruiĝas. Ĉar la subprogramo P povas esti rekursia, tial samtempe povas kunekzisti pluraj aktivaĵoj P1, P2, … Pn, ĉiu el kiuj havas sian revenadreson (kaj sian aron da parametroj, sian aron da lokaj variabloj ktp). Tial oni bezonas stakon por teni la aktivaĵojn.

Plenumstako, ĝiaj montriloj kaj kadroj

Ekz‑e se oni volas desegni kvadraton, oni eble uzos proceduron Kvadrato, kiu siavice por desegni la laterojn povas 4-foje voki la proceduron Rekto, desegnantan segmenton de rekto. Tiam ĉe unu el la 4 vokoj de Rekto la plenumstako povas aspekti kiel sur la apuda bildo. Tie estas prezentita tre simpla okazo, kiam la du aktivaj subprogramoj ekzistas en po 1 ekzemplero kaj posedas po 1 stakkadron en la plenumstako. Oni ankaŭ vidas la parametrojn, lokajn variablojn, revenadresojn, kiuj estas partoj de siaj respektivaj kadroj. La plenumstakajn montrilojn oni kutime lokas en reĝistroj.

Multaj procesoroj disponigas specialajn maŝinajn komandojn por manipuli stakon (kaj speciale la plenumstakon, ebligante surstakigi la revenadreson ĉe procedurvoko). Tial la plenumstakon oni ankaŭ iam nomas vokstako. Cetere, iam tiun terminon oni rezervas al pli speciala aparata stako, kiu entenas nur la revenadresojn.