Revisão da Memória de Programa

Os programas alocam memória de duas maneiras:

  • Pilha: Área contínua de memória para variáveis locais.

    • Os valores têm tamanhos fixos conhecidos em tempo de compilação.
    • Extremamente rápida: basta mover um ponteiro de pilha.
    • Fácil de gerenciar: segue chamadas de função.
    • Ótima localidade de memória.
  • Heap: Armazenamento de valores fora das chamadas de função.

    • Valores possuem tamanhos dinâmicos determinados em tempo de execução.
    • Ligeiramente mais devagar que a pilha: é necessário um pouco de gerenciamento.
    • Sem garantias de localidade de memória.

Exemplo

A criação de uma String coloca metadados de tamanho fixo na pilha e dados dinamicamente dimensionados - a string propriamente dita - no heap:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
StackHeaps1capacity5ptrHellolen5

Speaker Notes

This slide should take about 5 minutes.
  • Mencione que uma String é suportada por um Vec, portanto ela tem um tamanho e capacidade e pode crescer se for mutável por meio de realocação no heap.

  • Se os alunos perguntarem sobre isso, você pode mencionar que a memória subjacente é alocada no heap usando o System Allocator e os alocadores personalizados podem ser implementados usando a API Allocator.

Mais para Explorar

Podemos inspecionar o layout da memória com Rust inseguro (unsafe). No entanto, você deve apontar que isso é legitimamente inseguro!

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX