5.3 KiB
< Voltar | Sumário | Adiante >
🧠 Memória: Stack, Heap e Alocação
1. Visão Geral
PROMETEU trata memória como um recurso explícito.
Nada é alocado “por conveniência”.
Nada cresce “automaticamente”.
Nada é invisível.
Este capítulo define:
- os espaços de memória da PROMETEU VM
- como Stack e Heap funcionam
- o custo e as consequências da alocação dinâmica
- como a memória se relaciona com CAP e certificação
2. Espaços de Memória da PROMETEU VM
A memória da PROMETEU VM é dividida em regiões com responsabilidades claras:
+---------------------------+
|Constant Pool |
+---------------------------+
|Global Space |
+---------------------------+
|Call Stack |
| (Frames + Locals) |
+---------------------------+
| Operand Stack |
+---------------------------+
| Heap |
+---------------------------+
Cada região:
- tem semântica própria
- tem limites definidos
- tem impacto direto no custo de execução
3. Operand Stack
3.1 Definição
A Operand Stack é usada para:
- passagem de operandos entre instruções
- resultados intermediários
- avaliação de expressões
Ela é:
- LIFO
- de crescimento automático dentro do frame
- resetada entre frames (exceto valores persistidos explicitamente)
3.2 Características
- não armazena estruturas complexas
- armazena valores primitivos ou referências
- overflow ou underflow são erros fatais
A pilha de operandos é barata, rápida e temporária.
4. Call Stack (Stack de Chamadas)
4.1 Frames de Execução
Cada chamada de função cria um Call Frame, contendo:
- variáveis locais
- parâmetros
- endereço de retorno
- contexto de execução
Frames são criados com:
PUSH_FRAME n
E destruídos com:
POP_FRAME
4.2 Custos e Limites
- criação de frame tem custo explícito
- profundidade máxima de stack é limitada
- recursão profunda é desencorajada
PROMETEU favorece:
- iteração
- estado explícito
- controle consciente de profundidade
5. Global Space
5.1 Definição
O Global Space armazena:
- variáveis globais
- estado persistente do jogo
- referências de longo prazo
Globais:
- sobrevivem entre frames
- ocupam memória permanentemente
- contam para o uso total de memória
5.2 Uso consciente
PROMETEU incentiva:
- poucas globais
- estruturas compactas
- inicialização explícita
Globais são equivalentes a RAM estática em microcontroladores.
6. Heap
6.1 Definição
O Heap é a região de memória dinâmica da PROMETEU VM.
É usado para:
- objetos
- arrays
- tabelas
- estruturas compostas
Toda alocação no heap é feita explicitamente com:
ALLOC size
6.2 Custos da Alocação
Alocar memória:
- consome ciclos
- consome heap disponível
- aumenta pressão sobre o sistema
PROMETEU trata alocação como uma operação cara por definição.
Alocar é uma decisão arquitetural, não um detalhe.
7. Limites de Heap
7.1 Heap Finito
O heap:
- tem tamanho máximo definido
- pode variar conforme o CAP ativo
- nunca cresce dinamicamente
Exemplo:
Heap Limit:32KB
Heap Used:28KB
Ultrapassar o limite:
- não trava o jogo
- gera erro de execução
- aparece no relatório de certificação
7.2 Heap e CAP
Durante uma JAM ou avaliação:
- o pico de heap é medido
- o valor é comparado ao limite do CAP
- não conformidades são registradas
O jogo continua rodando, mas a evidência fica registrada.
8. Garbage Collection (GC)
8.1 Existência do GC
PROMETEU pode utilizar Garbage Collection simples, com as seguintes propriedades:
- não incremental (v0.1)
- custo explícito
- pausas observáveis
- comportamento documentado
GC não é invisível.
8.2 Custo do GC
Quando o GC ocorre:
- ciclos são consumidos
- o frame pode sofrer impacto
- o evento é registrado
PROMETEU ensina:
“Criar lixo tem custo.”
9. Boas Práticas de Memória
PROMETEU encoraja explicitamente:
- reutilização de estruturas
- alocação fora do loop principal
- buffers persistentes
- pooling manual
E desencoraja:
- alocação por frame
- estruturas temporárias descartáveis
- crescimento não planejado
10. Relação com Microcontroladores
O modelo de memória PROMETEU é intencionalmente similar a MCUs reais:
| MCU | PROMETEU |
|---|---|
| RAM estática | Global Space |
| Stack | Call Stack |
| Heap | Heap |
| Falha de alocação | Erro explícito |
| Fragmentação | Responsabilidade do dev |
Isso cria transferência direta de aprendizado.
11. Implicações Pedagógicas
Este modelo permite ensinar:
- diferença entre stack e heap
- custo de alocação
- lifetime de dados
- impacto arquitetural de decisões simples
- relação entre memória e tempo
Tudo com feedback imediato e visível.
12. Resumo
- PROMETEU possui espaços de memória bem definidos
- stack é temporária e barata
- heap é finita e cara
- alocação tem custo explícito
- GC é visível e mensurável
- memória participa da certificação