Сколько места занимает строка. Пустая строка занимает в CLR - PullRequest
4 голосов
/ 22 февраля 2011

Сколько места занимает string.Empty в CLR?
Я предполагаю, что это всего один байт для символа NULL.

Ответы [ 3 ]

8 голосов
/ 22 февраля 2011

Нет, строка представляет собой законченный объект с заголовком объекта (содержащим ссылку на тип, блок синхронизации и т. Д.), Длиной и любыми необходимыми символами ... который будет одним нулевым символом (два байта) и соответствующимдополняет до 4 или 8 байтов в целом.

Обратите внимание, что хотя строки в .NET имеют поле длины, они по-прежнему заканчиваются нулем для взаимодействия.Нулевой символ не включен в длину.

Конечно, string.Empty будет ссылаться только на один объект, независимо от того, сколько раз вы его используете ... но reference будет 4 или 8 байтов, поэтому, если у вас есть:

string a = string.Empty;
string b = string.Empty;
string c = string.Empty;

, это будет три ссылки (12 или 24 байта), все ссылающиеся на один и тот же объект (который, вероятно, составляет около 20 илиРазмером 24 байта).

1 голос
/ 22 февраля 2011

Я думаю, что каждому объекту .NET требуется 8-байтовый заголовок в 32-битных системах и 16-байтовый заголовок в 64-битных системах.Но так как string.Empty является общим (если используется в качестве заданной константы), тогда необходим только один экземпляр (поскольку он неизменен и, следовательно, является общим - любое его использование в приложении не имеет значения, так как я предполагаю, что .NET Framework ужеиспользует его внутри), и поэтому необходим только указатель (4 или 8 байт в зависимости от 32- или 64-разрядного хоста).

Но размер строки. Сама пустота должна быть 12 байтов или 20-байты на 32-битных и 64-битных хостах.

0 голосов
/ 22 февраля 2011

байт на символ ... Null принимает символ i ...

...