ссылка c# переменное выделение мадам

В браузере метрик вы найдете сводные метрики за определенный период времени. За рассматриваемый вами период было 0 вызовов, но на графике было 4 вызова, и общее количество вызовов составило 288. Трудно сказать, на что вы смотрите, может быть, приложите скриншот?

5
задан 28 January 2009 в 22:56
поделиться

5 ответов

Это сломано на следующий вид:

String s = "123";

Переменная s: это использует собственный размер указателя на текущей архитектуре (который считают 32 битами, если ОС составляет 32 бита, или процесс выполняется под WoW64), так 32 бита или 64 бита соответственно. В этом случае s или на стеке или на en-registered. Необходимо было поместить строковую ссылку в массив затем, что место будет заниматься на "куче".

То, что строка является объектом: 8 байтов служебного разделения 4 байта для таблицы метода, которая удваивается как признак того, что фактический тип объект плюс 4 байта для некоторых служебных битов и syncblock, который позволяет этому использоваться в качестве цели оператора блокировки.

Строка всегда завершается нулевым символом (хотя это - деталь реализации не часть контракта времени выполнения) так, чтобы это могло использоваться непосредственно со строковой пчелой C-стиля, символы являются UTF-16 так два байта за символ в смысле символ использования .NET (детали того, почему является сложным и требует перехода в Unicode, который я опущу).

Строки далее содержат следующее:

Версии .NET до 4,0

  • интервал для длины строки в символах
  • интервал для длины основного массива, содержащего символы
  • символ, который является первым символом в строке (последующие символы непосредственно после него), или нулевой символ для пустой строки

Строка может использовать до дважды объема памяти, требуемого на самом деле содержать необходимое владение символьного массива к пути работа StringBuilder

Таким образом сама строка использует между 16 + (2*n) + 2 и 16 + (4*n) + 2 байта на "куче" в зависимости от того, как она была создана.

Версии .NET от 4,0 вперед

  • интервал для длины строки в символах
  • символ, который является первым символом в строке (последующие символы непосредственно после него), или нулевой символ для пустой строки

Сама строка использует по крайней мере 12 + (2*n) + 2 байта на "куче".


Обратите внимание, что в обоих случаях строка может занять немного более фактическое место, чем это использует, в зависимости от какого выравнивания время выполнения осуществляет, это, вероятно, будет не больше, чем IntPtr. Размер.

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

поскольку больше обсуждения этого смотрит на эту статью. Обратите внимание однако, что эта статья устарела для изменений в 4,0.

12
ответ дан 18 December 2019 в 05:56
поделиться

Размер самой ссылки будет зависеть от Вашей архитектуры процессора - 4 байта на 32-разрядном, 8 байтов на 64-разрядном.

10
ответ дан 18 December 2019 в 05:56
поделиться

В зависимости от того, являетесь ли Вы на 32-или 64-разрядной машине, это будет или 32-или 64-разрядный указатель.

4
ответ дан 18 December 2019 в 05:56
поделиться

Если Вы хотите проверить это в код, звоните:

IntPtr.Size
1
ответ дан 18 December 2019 в 05:56
поделиться

Typicall 4 байта для ссылки необходим

1
ответ дан 18 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: