Stiva (Call Stack) este o structură de memorie de tip LIFO (Last-In, First-Out) gestionată hardware de microprocesor. O particularitate vitală a arhitecturii x86 este că stiva crește în jos, de la adrese mari de memorie către adrese mici.
Mecanismul instrucțiunilor PUSH și POP
; 1. PUSH scade automat pointerul RSP cu 8 octeți și scrie valoarea:
push rax
; Echivalent cu:
; sub rsp, 8
; mov [rsp], rax
; 2. POP citește valoarea de la vârful stivei și crește RSP cu 8 octeți:
pop rbx
; Echivalent cu:
; mov rbx, [rsp]
; add rsp, 8
; 3. Alocarea rapidă a memoriei pentru variabile locale pe stivă:
sub rsp, 32 ; Alocă 32 de octeți de spațiu local
; ... utilizare variabile la [rsp], [rsp+8], etc. ...
add rsp, 32 ; Eliberează memoria la ieșirea din funcție
Regula de Aliniere la 16 Octeți: Standardul System V ABI cere ca registrul
RSP să fie aliniat la un multiplu de 16 octeți (RSP % 16 == 0) înainte de invocarea oricărei instrucțiuni call. Încălcarea alinierii provoacă oprirea forțată a aplicației (Crash prin General Protection Fault) la executarea instrucțiunilor SIMD sau funcțiilor din biblioteca standard C (precum printf).
Întrebări & Exemple de Cod:
Gestiunea Stivei Hardware: Instrucțiunile PUSH, POP și Registrul RSPAi o nelămurire despre utilizarea comenzii
Gestiunea Stivei Hardware: Instrucțiunile PUSH, POP și Registrul RSPsau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.