DEV Community

Cover image for Aprendendo Rust: 07 - Regiões da memória usadas pela Rust
Richard de Jesus
Richard de Jesus

Posted on

Aprendendo Rust: 07 - Regiões da memória usadas pela Rust

E aee jovens, tudo bem com vocês?

Para conseguirmos entender como funciona uma das principais características da linguagem Rust o ownership, precisamos entender como Rust utiliza a memória do computador.

Esta postagem não terá exemplo prático, iremos entender um pouco sobre as regiões da memória onde os dados são armazenados.

Então, lets'go!!!

Data Memory (Memória de dados)

Data memory é onde são salvos os dados com tamanho fixo e estático, são os dados que sempre estarão disponíveis para utilizarmos durante a vida útil do programa. Por exemplo um texto, os dados são somente lidos nunca escritos, então eles são colocados nesta região. Esses dados são sempre muito rápidos para utilizarmos, pois o compilador consegue realizar muitas otimizações.

Stack Memory (Memória de pilha)

A stack memory armazena os dados em forma de pilha, ou seja, armazena os dados na ordem que eles chegam e os remove na ordem inversa, também conhecido como lifo (last in, first out) ultimo a chegar, primeiro a sair.
Como padrão dizemos fazer um push quando estamos inserindo um dado na pilha e fazer um pop quando estamos removendo.

Ela é mais rápida do que a heap memory pois ela não precisa procurar um lugar pra adicionar um dado, ou procurar onde está algum dado pois sempre será retirado o ultimo dado que foi inserido. E todos os dados que ela tem deve ter um tamanho fixo e conhecido tornando ela mais rápida.

As variáveis primitivas são um exemplo de dados salvos na stack memory.

Heap Memory

A heap memory é um pouco mais complexa, e diferentemente da stack memory os dados são adicionados com um tamanho desconhecido em tempo de compilação, ou com um tamanho dinâmico. Quando estamos adicionando dados nessa região chamamos de alocação e quando estamos removendo de desalocação.

Quando estamos alocando na heap memory, o sistema operacional encontrará um espaço vazio que seja grande o suficiente, marcará este espaço como "em uso" e nos retorna um ponteiro com o endereço deste local. Este ponteiro fica armazenado na stack memory, e se quisermos buscar o dado que esteja na heap memory devemos seguir este ponteiro.

Acessar os dados na heap memory é mais lento do que na stack memory pois os dados não ficam de uma forma organizada, e é necessário seguir um ponteiro pra chegar onde eles estão.

"Rastrear quais partes do código estão usando quais dados na heap, minimizar a quantidade de dados duplicados na heap e limpar segmentos inutilizados da heap para que não fiquemos sem espaço são todos problemas tratados pelo ownership. Uma vez que você entende ownership, você não vai mais precisar pensar tanto sobre a stack e a heap, mas saber que ownership existe para gerenciar os dados na heap pode ajudar a explicar como e por que ele funciona." (Trecho retirado do book).

Na próxima postagem veremos como funciona o Ownership.

O fonte das postagens estão no Github, segue o link: Aprendendo Rust

Quaisquer dúvidas ou sugestões para que eu melhore nas postagens deixe um comentário, e continue acompanhando os próximos posts.

Referencias

O livro de Rust

Tour of Rust

CodeShow

Top comments (0)