Article image
Renata Machado
Renata Machado01/03/2023 19:44
Compartilhe

Alocação de memória C#

    Entender como os dados são alocados em memória são muito importantes no aprendizado inicial, pois você passa a compreender como os tipos destes dados ficam armazenados, daí os tipos de variáveis quando estamos criando nossos códigos ficam mais claros o porque que certos erros acontecem. Por exemplo: Os tipos primitivos como int, float, bool etc ficam armazenados na Stack, são chamados tipos Valor. Como a variável fica "junto" como o valor na Stack, o compilador encontra mais rápido, enquanto que na Heap que os dados são mais complexos, como por exemplo, um objeto, o mesmo é encontrado na memória por referência, por isso são tipos Referência.Sendo assim, dizemos que existe um ponteiro na Stack, pela qual faz a referência para a Heap.

    Resumindo:

    • Value-Type: são tipos leves (como os tipos primitivos e structs) que ficam armazenados diretamente na memória stack. Os valores das variáveis ficam armazenados juntamente com as próprias variáveis, sendo o acesso ao seu conteúdo feito de maneira direta;
    • Reference-Type: tipos pesados (objetos criados a partir de classes, etc.) que ficam armazenados na heap. Para não sacrificar a performance, é criada uma referência (ponteiro) na stack que aponta para qual posição de memória o objeto está armazenado na heap. O acesso é feito via essa referência na stack. Sendo assim, o acesso ao conteúdo é indireto, dependendo dessa referência;
    • Stack: porção de memória pequena onde os value-types e os ponteiros ficam;
    • Heap: porção maior de memória onde os reference-types ficam de fato alocados… Para se fazer o acesso a eles, precisamos de um ponteiro na stack que indique a posição de memória na heap onde o objeto está de fato alocado.
    Compartilhe
    Comentários (0)