Типы значений в объекте, хранящемся в куче?

Я могу представить, что этот вопрос задавали тысячи раз, но мне не очень повезло с ответом, к тому же это скорее из любопытства, чем из необходимости.

Углубляясь в основы C #, мне было интересно, поскольку объекты хранятся в куче, типы значений внутри объектов также хранятся в куче или они помещаются в стек?


person BoredOfBinary    schedule 18.01.2011    source источник


Ответы (4)


Они хранятся в куче внутри памяти, выделенной для ссылочного типа. Кроме того, типы значений часто хранятся в местах, отличных от стек ". Однако в спецификации CLI не указывается, где находится пул памяти, в котором хранятся типы значений - это деталь реализации, которая не имеет значения.

person Reed Copsey    schedule 18.01.2011

Эндрю Хэйр прав. Для получения полной информации см. Запись в блоге Эрика Липперта:

Меня беспокоит миф о том, что «типы значений помещаются в стек» ... Обычно это формулируется неправильно: утверждение должно быть таким: «типы значений могут храниться в стеке», вместо более распространенных «типы значений всегда хранится в стеке ".

person Rich Tebb    schedule 18.01.2011

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

person Andrew Hare    schedule 18.01.2011

Да, они хранятся в куче. Однако это все детали реализации, как неоднократно описывал Эрик Липперт. Предлагаю вам прочитать об этом его сообщения в блоге это последнее, а эти two также имеет важное значение.

person Jon Skeet    schedule 18.01.2011
comment
Отличные статьи, спасибо! Кстати, люблю вашу книгу, случайно прочитаю ее сейчас! - person BoredOfBinary; 19.01.2011