Размер структуры, содержащей массив - PullRequest
2 голосов
/ 30 июля 2011

Я использую структуру c # в качестве псевдо-объединения (используя атрибут LayoutKind.Explicit) для передачи сетевых сообщений вокруг моей программы. Я понимаю, как использовать макет с примитивными типами, поскольку они имеют известный размер.

Однако, как бы я сделал это с одним из полей, являющимся массивом символов? Я знаю, что символ - это 2 байта данных (в формате Юникод), но насколько большой символ []? Правильно ли я считаю, что это ссылочный тип, поэтому его размер - это не просто количество элементов * 2?

Как бы я расположил структуру для этого? Это вообще возможно?

Ответы [ 2 ]

4 голосов
/ 30 июля 2011

Размер - ширина ссылки; так 4 байта на x86 или 8 байтов на x64. Размер массива не имеет значения, поскольку массив хранится отдельно в куче. Если вы хотите сериализовать эти данные в байтовый поток, то это, вероятно, зависит от того, какую кодировку вы используете для данных char. UTF16 действительно будет 2 * количеством символов, но UTF8 или UTF32 будут другими.

0 голосов
/ 30 июля 2011

Это странно, не должно ли оно быть равным длине, умноженной на количество байтов на символ?

...