Sobes.tech
Junior — Middle

Quais são as formas de alocar tipos significativos na memória gerenciada (heap)?

sobes.tech IA

Resposta da IA

Em C#, os tipos de valor (struct) geralmente são colocados na pilha, mas também podem ser colocados no heap gerenciado de várias maneiras:

  1. Aninhamento em um tipo de referência — se o tipo de valor for um campo de uma classe (tipo de referência), ele é armazenado dentro do objeto no heap.

  2. Uso de tipos de valor boxed — ao fazer boxing de um tipo de valor, ele é copiado para um objeto no heap.

  3. Uso de new para criar uma instância de struct dentro de uma classe ou array — arrays de tipos de valor e campos struct dentro de classes são colocados no heap.

Exemplo:

struct Point { public int X, Y; }

class Container {
    public Point p; // Point é armazenado no heap como parte do objeto Container
}

Container c = new Container(); // objeto c e campo p no heap

object o = c.p; // boxing: cópia de p no heap como objeto

Assim, os tipos de valor podem estar no heap se fizerem parte de um tipo de referência ou se estiverem empacotados.