Получить размер структуры с учетом System.Type - PullRequest
6 голосов
/ 17 декабря 2010

Учитывая структуру MyStruct, я могу получить размер экземпляров этой структуры, используя sizeof(MyStruct) в небезопасном коде.Однако я хочу получить размер структуры с учетом объекта Type для структуры, т. Е. sizeof(typeof(MyStruct)).Существует Marshal.SizeOf, но он возвращает неуправляемый маршалированный размер , тогда как я хочу, чтобы управляемый размер этой структуры.

1 Ответ

5 голосов
/ 17 декабря 2010

Не существует документированного способа определения макета управляемой структуры.JIT-компилятор легко использует это преимущество, он переупорядочивает поля структуры, чтобы получить наилучшую упаковку.Маршалинг * всегда требуется для получения предсказуемого макета, как указано в атрибуте [StructLayout].Вы должны прыгнуть через обруч Marshal.StructureToPtr().Делаете ли вы это сами или позвольте маршаллеру pinvoke сделать это за вас.

Marshal.SizeOf(Type) дает вам размер маршалла structБолее подробную информацию о том, как это работает, можно найти в этом ответе .

...