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

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

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

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

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

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

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

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

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