Stack de proces, antitotal fkn

Stack este o metodă de organizare a memoriei.
Această memorie stochează informații despre secvența apelurilor către funcțiile de execuție în curs, variabilele locale și cadrele de tratare a excepțiilor.

Strict vorbind, este posibil să lucrați cu stivă de flux la nivelul cuvintelor complete ale procesorului. Cu alte cuvinte, procesorul are comenzile "a pune cuvântul complet pe stivă" și "a scoate cuvântul complet din stiva". Dar, de cele mai multe ori, limbile de nivel înalt lucrează cu un stack la nivelul cadrelor.

Un cadru de stivă este un bloc de date care descrie evoluția unei subrutine care rulează la un moment dat. Acesta include:

Dimensiunea cadrului stivei se poate modifica dinamic în timpul funcționării programului, atâta timp cât rămâne pe partea superioară a teancului. În plus, în anumite limbaje de programare există funcții speciale, care nu creează propriile cadre, și schimba părinte - deci, în C / C ++, acest „păcat“ setjmp / longjmp și alloca

În general, cadrul stivă este creat de rutina de la începutul activității sale (aceasta se numește un „prolog“ rutine) și distruse la sfârșitul anului (așa cum este numit - Nu știu, „epilog“?). Dar, de exemplu, limbaj de asamblare programator se definește comportamentul subrutina, și limbajul de nivel înalt au posibilitatea de a renunța la prolog (de exemplu, __declspec (gol) în Visual C / C ++), astfel încât să puteți crea un cadru stivă completă sau nu - este determinată de soluția de programator.

Dar există două elemente care sunt dincolo de programator - primul și al doilea paragraf, astfel cum acestea sunt puse pe stiva nu este numit și rutina de asteptare (bine în continuare, în cazul în care rutina apelată pentru toate acestea pentru a învăța cum să nu stiva). Detaliile transferului acestor două elemente sunt determinate de un lucru, cum ar fi un acord de apel.

Astfel, cdecl convenția de apel, aplicat pentru funcțiile C și C ++ limbi, înseamnă că parametrii pe stivă sunt plasate în ordine inversă și recuperate din rutina apelantului. Acest lucru permite utilizarea unor rutine cu un număr variabil de argumente, ca și în acest caz, primul parametru responsabil pentru numărul de argumente este cel mai aproape de partea de sus a stivei, ceea ce înseamnă că distanța dintre ea și în partea de sus a constantei stivă. Aceasta permite ca subrutina apelată să o găsească.

Așa cum am spus la început, stivele nu există în procese, ci în fire. Acest lucru se datorează faptului că, pentru fire diferite, lanțul de apeluri subrutine poate fi complet diferit. Acest lucru nu este un inconvenient, ci mai degraba este un lucru bun, deoarece permite realizarea de fluxuri de comutare înlocui pur și simplu indicatorul stiva curent, înlocuind astfel întreaga stiva de apel. Alte valori (de exemplu, registre procesor) pentru a salva în mod explicit și înlocuitor nu este necesar - suficient pentru a le menține într-o stivă, și apoi recupera. Astfel, în cazul în care se debarasa beteala markeri de securitate încuietorile și altele, la un nivel fundamental tur - acesta este doar un indicator stocat în partea de sus a stivei (procesoare x86 - ESP înregistrare sau înregistrare pereche ss: ESP)

Cuvinte cheie:

Articole similare