Value Types (Tipo de valor) vs Reference Types (Tipos de referência)

Value Types

Os Value Types ou tipos de valor, são uma forma de tipagem aonde a transferência de informação é feita pela copia do valor de uma variável para outra, representando dados que são armazenados diretamente na memória onde a variável está declarada.

A exemplo do C#, temos os seguintes tipos de valor:

Value types no C#

Value Types geralmente são alocados no stack, porem, dependendo da situação eles podem ser alocados no heap. Podemos citar alguns exemplos como:

Situação Local de armazenamento
Declaração de variável em método Stack
Declaração de parâmetro de um método Stack
Declaração de membro de uma classe Heap
Declaração como membo de uma struct Depende de onde a strcut for alocada
ref struct Stack

Reference Types (Tipos de referência)

Os tipos de referência representam dados que são armazenados na memória, mas a variável contém apenas um endereço que aponta para a localização real dos dados.

Os Reference Types são alocado sempre no Heap e coletados pelo Garbage Collector após não serem mais utilizados. Alguns exemplos são:

Refrences Types no C#

Referências:

Where are types allocated in .NET and why people get it so wrong - YouTube