2013-10-26 5 views

ответ

15

Ссылка реализована как указатель, поэтому в приложении, работающем в режиме x86 (32 бит), ссылка представляет собой четыре байта, а в режиме 64 (64 бит) эта ссылка составляет восемь байтов.

Поскольку ссылка является указателем на объект, эта ссылка имеет тот же размер независимо от того, на что она указывает, или даже если она не указывает на что-либо вообще (null).

+0

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

+1

@Ashigore: На самом деле в ссылке нет накладных расходов, это всего лишь указатель. Любые служебные данные связаны с объектом, например с информацией о типе и ссылками на сбор мусора. – Guffa

+0

Интересно, спасибо за это. – Ashigore

11

Ссылка использует собственный размер слова платформы, на которой он работает.

То есть 32-разрядный: 32 бит. 64-бит: 64 бит.

Таким образом, нет .. ваш объект может быть переменным по размеру .. ссылка всегда будет такой, как указано выше.

3

От C# 5.0 in a Nutshell: The Definitive Reference страница 22;

Ссылочных типы требуют отдельного распределения памяти для ссылки и объекта. Объект потребляет столько байтов, сколько его полей, плюс дополнительные административные издержки. Точные накладные расходы - , по сути, частные для реализации среды выполнения .NET, но , как минимум, накладные расходы - восемь байтов, используемые для хранения ключа для типа объекта , а также временную информацию, такую ​​как состояние блокировки для многопоточности и флаг, указывающий, было ли оно зафиксировано от перемещения сборщиком мусора. Для каждой ссылки на объект требуются дополнительные четыре или восемь байтов, в зависимости от того, выполняется ли среда выполнения .NET на 32- или 64-разрядной платформе.

Смежные вопросы