Использование отражения для определения того, как тип .Net размещается в памяти

экспериментирую с оптимизацией синтаксических комбинаторов в C #. Одна возможная оптимизация, когда сериализованный формат соответствует формату в памяти, состоит в том, чтобы просто сделать (небезопасный) memcpy данных, которые будут проанализированы по экземпляру или даже по множеству экземпляров типа.

Я хочу написать код, который определяет, соответствует ли формат в памяти сериализованному формату, чтобы динамически определить, можно ли применить оптимизацию. (Очевидно, что это небезопасная оптимизация, которая может не сработать по целому ряду скрытых причин.Я просто экспериментирую, не планируя использовать это в рабочем коде.)

Я использую атрибут[StructLayout (LayoutKind.Sequential, Pack = 1)] для принудительного отсутствия заполнения и для того, чтобы порядок в памяти соответствовал порядку объявления. Я проверяю этот атрибут с помощью отражения, но на самом деле все это подтверждает "без прокладки ", Мне также нужен порядок полей. (Я бы предпочел не указывать вручнуюFieldOffset атрибуты для каждого поля, так как это будет очень подвержено ошибкам.)

Я предполагал, что смогу использовать порядок полей, возвращаемыхGetFields, но в документации явно говорится, что порядок не указан.

Учитывая, что я устанавливаю порядок полей с помощью атрибута StructLayout, есть ли способ отразить этот порядок?

редактировать ям в порядке с ограничением, что все поля должны бытьblittable.

Ответы на вопрос(2)

Ваш ответ на вопрос