Операция стека или операция кучи, они оба будут такими же, как вы обращаетесь к адресу памяти, который находится в двух разных местах.
Типы значений имеют небольшие значения: int, byte и т. Д., Они имеют небольшой размер и на них очень часто ссылаются с точки зрения математических вычислений. Поскольку они очень малы по размеру, максимум от 4 до 16 байт (для лучшей производительности не следует использовать более 16 байт в типе значения), выделение такого небольшого пространства в куче и освобождении, сборке мусора и т. Д. Будет очень дорогостоящим.
Каждый метод, который мы вводим, в среднем мы определяем 10 локальных типов значений для его внутреннего использования, что будет очень дорого обходиться в качестве ссылочных типов.
Стек может легко увеличиваться и уменьшаться (не размер стека, а часть стека, используемая для текущего метода !!), так как типы значений просто рассматриваются как смещение от указателя стека, а их распределение и освобождение легко, как его простое приращение и decrememnt для стека указатель на общий размер всех используемых типов значений.
Где еще в ссылочном типе, каждый ссылочный объект имеет свое собственное размещение и размеры, плюс CLR должен поддерживать таблицу объектов, которая является своего рода индексом реальных указателей в памяти, чтобы избежать переполнения буфера. Таким образом, один используемый вами объект (ссылочный тип) фактически имеет два хранилища, одну запись индекса в справочной таблице CLR и фактическое пространство памяти. Вот почему легко и быстро хранить типы значений в стеке.