Есть ли какое-либо соглашение в отношении алгоритма, используемого для создания макетов структур на C?
Я хочу иметь возможность запускать код в vm, чтобы иметь структуры, совместимые с их аналогами Cтак же, как работает взаимодействие C #.Для этого мне нужно знать, как работает алгоритм выравнивания.Я понимаю, что для этого должна быть конвекция, так как она хорошо работает на C #.Я имею в виду вероятный алгоритм, который они использовали для этого, но я не нашел никаких доказательств того, что он правильный.
Вот как я думаю, что он работает:
для каждогообъявленное поле (в порядке объявления)
- Проверьте, помещается ли поле в оставшиеся байты (до следующего выравнивания)
- Если оно не подходит, выровняйте это поле;в противном случае добавьте его к текущему смещению
, например, в 32-битной системе для такой структуры:
{
byte b1;
byte b2;
int32 i1;
byte b3;
}
будет выглядеть так с этим алгоритмом:
{
byte b1;
byte b2;
byte[2] align1;
int32 i1;
byte b3;
byte[3] align2;
}