Podendo identificar classes, atributos, métodos, instância e objeto, conseguiremos entender o básico de gerenciamento de memória antes de seguir em frente.
O ecossistema .net possui ferramentas de gerenciamento como o CLR e o Garbage Collector, que trabalham para ajudar em um maior desempenho de desenvolvimento. Por isto, quando programamos, não há necessidade de gerenciar memória e seus espaços manualmente já que o próprio .net cuida disso.
Quando falamos de memória, nos deparamos com a stack e heap que estão diretamente atreladas aos tipos valor e referência. Primeiro vamos entender as memórias.
Stack
A Stack é uma memória menor que a heap e por isso fornece informações de forma mais ágil. Ela armazena dados do tipo valor que são dados que não ocupam muito espaço na memória e são passados diretamente para as variáveis (de tipos primitivos como bool, int, double, structs - considerados dados leves -) ou valores que referenciam posições da heap.
Ao criar uma variável de tipo primitivo, ela fica presente na stack onde o compilador tem fácil acesso a ela. Se esta variável armazenar uma referência, é possível que o compilador acesse mais fácilmente a posição de um objeto na heap.
Heap
A Heap por ser maior, possui a capacidade de armazenar dados maiores como objetos. Se lembrarmos do comando new utilizado para instanciar objetos, podemos ter uma maior clareza do que está acontecendo por baixo dos panos:
A cima estamos instanciando um carro
Quando instanciamos um objeto, ele será criado na memória heap, dessa forma:
Dados mais pesados são armazenados na heap, e eles são do tipo valor, pois as informações se encontram na heap. Para acessarmos este objeto, pegamos a referência a ele, que é justamente uma variável presente na stack. Então podemos entender que quando criamos uma variável para criar um objeto, não fazemos nada mais que criar uma referência da heap para ele🐣 Uma forma mais visual de representar isso:
Nesta sessão, pudemos entender a diferença entre as duas memórias e os tipos de valores presentes nelas. Isto é importante porque em determinados momentos precisamos saber de onde vem o objeto que estamos manipulando.
Top comments (0)