размер пустой строки в C # - PullRequest
8 голосов
/ 17 апреля 2011

В Java пустая строка составляет 40 байтов. В Python это 20 байтов. Насколько большой пустой объект строки в C #? Я не могу сделать sizeof, и я не знаю, как еще узнать. Благодаря.

Ответы [ 3 ]

10 голосов
/ 17 апреля 2011

Это 18 байтов :

16 байтов памяти + 2 байта на символ, выделенных + 2 байта для окончательного нулевого символа.

Обратите внимание, что это было написано о .Net 1.1.

Поле m_ArrayLength было удалено в .Net 4.0 (вы можете увидеть это в справочном источнике)

5 голосов
/ 17 апреля 2011

Версия CLR имеет значение.До .NET 4 строковый объект имел дополнительное 4-байтовое поле, в котором хранилось поле «acity », m_arrayLength.Это поле больше не присутствует в .NET 4. В противном случае оно имеет стандартный заголовок объекта, 4 байта для блока синхронизации, 4 байта для указателя таблицы методов.Затем 4 байта для хранения длины строки (m_stringLength), за которыми следуют 2 байта для каждого символа в строке.И 0 символов, чтобы сделать его совместимым с нативным кодом.Объекты всегда кратны длине 4 байта, минимум 16 байтов.

Таким образом, пустая строка составляет 4 + 4 + 4 + 2 = 14 байтов, округленных до 16 байтов в .NET 4.0.20 байтов на более ранних версиях.Данные значения для x86.Все это очень хорошо видно в отладчике, проверьте этот ответ на наличие подсказок.

3 голосов
/ 17 апреля 2011

Джон Скит недавно написал целую статью на эту тему.

В x86 пустая строка составляет 16 байтов, а в x64 - 32 байта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...