Где хранится поле типа int, объявленное в классе?

«Где хранится поле типа int, объявленное в классе?» — вопрос из категории Управление памятью, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Поле int, объявленное как член класса (class), хранится в управляемой куче (heap). Оно является неотъемлемой частью памяти, выделенной для экземпляра этого класса.

Правило: Данные экземпляра класса (поля, включая типы значений) всегда размещаются в куче вместе с заголовком объекта.

Пример для сравнения:

// КЛАСС: поле в куче
class MyClass
{
    public int NumberInHeap; // Часть объекта MyClass в куче.
}

// СТРУКТУРА: поле хранится там же, где и сама структура.
struct MyStruct
{
    public int NumberFollowsStruct; // В стеке, если struct — локальная переменная.
                                    // В куче, если struct — поле другого класса.
}

void Example()
{
    // Экземпляр класса (и его поле 'NumberInHeap') — в КУЧЕ.
    MyClass obj = new MyClass();
    obj.NumberInHeap = 42;

    // Экземпляр структуры (и его поле 'NumberFollowsStruct') — в СТЕКЕ.
    MyStruct localStruct;
    localStruct.NumberFollowsStruct = 24;
}

Практический вывод: Нельзя сказать "int всегда в стеке". Контекст (класс vs структура, локальная переменная vs поле) полностью определяет место хранения. Поле класса — часть объекта в куче.