![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Lexicss |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 197 Регистрация: 16.8.2006 Где: Беларусь, Минск Репутация: нет Всего: 1 |
привожу фрагмент кода:
Структура имеет 3 байтовых элеменат и 1 двухбайтовый. Итого её размер должен составлять 5 байт. С помощью sizeOf() получаю неуправляемый размер 6. Почему?
когда выстраиваю структуру rc2 в виде массива байт то получаю результат [1,0,13,0,2,3] Откуда в этом массиве берётся первый ноль? И почему его длина составляет 6, а не 5? P.S. : если из структуры убрать элемент len, то её размер становится верный - 3 байта. В чём тут суть такого фокуса и как его обойти? Это сообщение отредактировал(а) Lexicss - 10.6.2009, 12:41 --------------------
Бери от жизни всё. |
||||
|
|||||
DVariuS |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 200 Регистрация: 10.2.2009 Где: Ukraine Репутация: 5 Всего: 8 |
Lexicss, это из-за выравнивания данных в памяти, смотри:
а это строка в памяти, содержащая твою структуру:
Байты могут располагаться в памяти один за другим, а вот для размещения слова (word) компилятор берет следующий четный адресс. Это связано с оптимизацией для увеличения быстродействия, подробней можешь прочитать в любой книге по ассемблеру. При программировании на C# такие низкоуровневые моменты лучше не затрагивать, т.к. язык предназначен для других целей. |
||||
|
|||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Lexicss, почитай про StructLayoutAttribute
|
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
PashaPash, StructLayout разве влияет на размер структуры в managed-памяти?
я тут поигрался - результат всё тот же - sizeof выдаёт 6 байт...однако при копировании в unmanaged-блок памяти объект вполне себе и в 5 байт умещается... -------------------- СУВ, Partizan. |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Partizan, Marshal.SizeOf возвращает unmanaged size of an object in bytes. Покажи пример играния
![]() |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
PashaPash,
Добавлено через 3 минуты и 14 секунд А, всё...понял почему...Не выставил параметр атрибута Size ![]() если Size выставить значение 5, то всё ок. -------------------- СУВ, Partizan. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |