Assembly x86-64Memória
Pilha e quadros
push/pop, prólogo/epílogo, alinhamento e red zone
Pilha, quadros e alinhamento
A pilha cresce para baixo (endereços menores). push subtrai 8 de rsp e grava; pop lê e soma 8. Cada função costuma abrir um quadro (stack frame) no prólogo e fechá-lo no epílogo, usando rbp como ponto fixo para acessar locais e argumentos.
; prólogo e epílogo típicos de uma função
minha_funcao:
push rbp ; salva o frame pointer do chamador
mov rbp, rsp ; rbp = base do novo quadro
sub rsp, 32 ; reserva 32 bytes para locais (múltiplo de 16)
; ... corpo: [rbp-8], [rbp-16]… são as variáveis locais ...
mov rsp, rbp ; libera os locais
pop rbp ; restaura o frame do chamador
ret ; desempilha o endereço de retornoDuas regras práticas importantes: (1) no momento de um call, a pilha deve estar alinhada em 16 bytes — por isso os sub rsp, N costumam usar múltiplos de 16 (contando o endereço de retorno já empilhado). (2) No System V (Linux) existe a red zone: 128 bytes abaixo de rsp que uma função folha pode usar sem ajustar o ponteiro. O Windows não tem red zone, mas exige os 32 bytes de shadow space acima citados.