Nano Hash - криптовалюты, майнинг, программирование

sizeof пустой строки в С#

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

17.04.2011

Ответы:


1

18 байт:

16 байт памяти + 2 байта на выделенный символ + 2 байта на последний нулевой символ.

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

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

17.04.2011
  • Любой способ проверить это? Как я могу узнать это программно? 17.04.2011
  • Или 26 байт в 64-битной системе, и не забывайте о выравнивании. 17.04.2011
  • @SLaks: я на Linux, но спасибо, хорошая идея. Разве не интересно, что я не могу найти это в C#? Java и Python были легкими... 17.04.2011
  • @Random: Как что-то может занимать 26 байт в 64-битной системе? 26 байт даже не допустимый размер для 32-битной системы. 17.04.2011
  • В 64-битной системе он вообще не должен меняться. Обратите внимание, что сюда не входит заголовок объекта, который измерял Джон Скит и который будет варьироваться. 17.04.2011
  • Это уже не точно для .NET 4.0. А размеры объекта всегда кратны 4, то есть 20 байт. 17.04.2011
  • Я имел в виду размер до заполнения выравнивания. (и всегда ли они кратны 8 на 64-битной версии?) 17.04.2011

  • 2

    Версия 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. Все это очень хорошо видно в отладчике, проверьте этот ответ для подсказок.

    17.04.2011
  • Цените это, спасибо. Почему вы сказали, что скорее всего в моно будет еще 4 байта? 17.04.2011
  • Потому что он был основан на SSCLI20, который, в свою очередь, был основан на исходном коде CLR версии 2. 17.04.2011
  • Так m_arrayLength все еще там? 17.04.2011
  • Предположительно. Получить исходный код для Mono легко, почему бы вам не взглянуть, если отладчик бесполезен. 17.04.2011

  • 3

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

    На x86 пустая строка составляет 16 байт, а на x64 — 32 байта.

    17.04.2011
  • А как насчет нулевого символа, о котором говорит @SLaks? Это необходимо? 17.04.2011
  • @Dervin Thunk, без понятия ... читайте статью для более подробной информации;) 17.04.2011
  • 16 байт правильно для .NET 4.0 x86, подходит нулевой терминатор. До трех символов, следующая большая строка состоит из 4 символов, 20 байтов. Mono, скорее всего, на 4 байта больше. 17.04.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..