C # почему sizeof небезопасен и как получить размер структуры безопасным способом? - PullRequest
6 голосов
/ 10 марта 2010

Я определил структуру для отправки через сокет. Я хотел бы получить его размер, но sizeof небезопасен и такой же для "System.Runtime.InteropServices.MarshalSizeOf". Есть ли способ получить его размер безопасным способом?

Ответы [ 2 ]

3 голосов
/ 12 февраля 2011

Нет способа сделать это для управляемых структур.Marshal.SizeOf будет возвращать только размер данных маршалированных типов, составляющих структуру ... MIGHT будет правильным для управляемых типов на некоторых платформах, но не на других.

Это сделано так, что JIT может создавать структуры по-разному в зависимости от платформы, на которой он работает.

Более подробная информация здесь: Блог Криса Брамма

0 голосов
/ 14 ноября 2012

См. в моем блоге для библиотеки оболочек, которая позволяет вам определить, какой JIT будет определять размер управляемого типа (во время выполнения). Он работает с использованием инструкции sizeof IL, которая вообще не представлена ​​в C #. Он может быть запущен без каких-либо специальных разрешений и может быть проверен.

Примечание: это может или не может быть тем, что вы на самом деле хотите. Это может вернуть 8 для структуры, которая на самом деле имеет только один байт. Я не совсем понимаю ваш вопрос полностью, поэтому я не уверен, действительно ли вы этого хотите или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...