Aula 21: Gerenciamento de Memória e Ambientes de Runtime
Objetivos
- Entender o layout de memória de um processo.
- Stack Frames e Calling Conventions.
Motivação em Engenharia de Computação
Compiladores não existem no vácuo: eles precisam respeitar o modelo de execução e as convenções da plataforma alvo.
Para quem projeta sistemas embarcados, sistemas operacionais ou firmware, compreender ambientes de runtime é essencial para:
- Garantir uso eficiente da memória (stack vs heap).
- Implementar chamadas de sistema e interrupções de forma correta.
- Interagir com bibliotecas e código legado escrito em C/C++.
Conteúdo
Para que funções chamem umas às outras, o compilador e o sistema seguem um contrato sobre uso de memória: layout do processo, pilha de ativação e convenção de chamada. Esse é o ambiente de runtime.
flowchart TB
subgraph processo [Espaço de endereços]
Text[Text código]
Data[Data/BSS]
Heap[Heap]
Stack[Stack]
end
Layout de Memória
- Text (Code): Instruções (Read-Only).
- Data/BSS: Variáveis globais e estáticas.
- Heap: Alocação dinâmica (
new,malloc). Vida útil indefinida. - Stack: A memória de trabalho das funções.
A Pilha (Stack)
A Stack é uma pilha de Registros de Ativação (Activation Records / Frames). Cada vez que uma função é chamada, um novo Frame é empilhado. Ele contém: - Parâmetros: Argumentos passados para a função. - Endereço de Retorno: Onde continuar a execução após o retorno. - Link Dinâmico (Saved Base Pointer): Ponteiro para o frame do chamador. - Variáveis Locais: Espaço para variáveis declaradas na função. - Spill Area: Espaço para registradores que precisaram ser “despejados” da CPU.
Convenção de Chamada (Calling Convention)
Define quem faz o quê (Ex: cdecl, stdcall, x86-64 System V). - Quem limpa a pilha? (Caller vs Callee). - Onde vão os argumentos? (Registradores RDI, RSI… ou na Pilha?). - Quais registradores devem ser preservados? (Callee-saved vs Caller-saved).
Resumo
- Layout: Text, Data/BSS, Heap, Stack. Cada chamada de função empilha um frame (parâmetros, endereço de retorno, variáveis locais, área de spill).
- Convenção de chamada (ABI) define quem passa argumentos, quem limpa a pilha e quais registradores são preservados; o compilador deve respeitá-la.
Referências
- Aho et al. (2006); Cooper & Torczon (2011).
Materiais da aula
Última atualização: 08/03/2026