В Java пустая строка имеет размер 40 байт. В Python это 20 байт. Насколько велик пустой строковый объект в С#? Я не могу сделать sizeof
и не знаю, как еще узнать. Спасибо.
sizeof пустой строки в С#
Ответы:
16 байт памяти + 2 байта на выделенный символ + 2 байта на последний нулевой символ.
Обратите внимание, что это было написано о .Net 1.1.
Поле m_ArrayLength
было удалено в .Net 4.0 (вы можете увидеть это в справочном источнике)
Версия CLR имеет значение. До .NET 4 у строкового объекта было дополнительное 4-байтовое поле, в котором хранилось поле «capacity», m_arrayLength. Этого поля больше нет в .NET 4. В остальном оно имеет стандартный заголовок объекта, 4 байта для блока синхронизации, 4 байта для указателя таблицы методов. Затем 4 байта для хранения длины строки (m_stringLength), а затем по 2 байта для каждого символа в строке. И 0 символов, чтобы сделать его совместимым с собственным кодом. Длина объектов всегда кратна 4 байтам, минимум 16 байт.
Таким образом, пустая строка равна 4 + 4 + 4 + 2 = 14 байтов, округленных до 16 байтов в .NET 4.0. 20 байт в более ранних версиях. Данные значения для x86. Все это очень хорошо видно в отладчике, проверьте этот ответ а> для подсказок.
m_arrayLength
все еще там? 17.04.2011 Джон Скит недавно написал целую статью. по этому вопросу.
На x86 пустая строка составляет 16 байт, а на x64 — 32 байта.