День добрый! Достался тут в наследство мне большой проект, написанный под x86-32, с заданием портировать его под ARM9, все бы хорошо, да только под арм данные должны выравниваться на границе их размерностей. Естетственно долгие годы проект писался с кучей структур #pragma packed(1) и относительно вольной работой с указателями и сейчас представляет собой просто чудовищный объект для портирования. Покурив мануалы, вырисовывается 3 способа:
1) попытка переопределить все необходимые указатели для компилятора как packed, после чего компилер (GCC) будет вынимать память аккуратно побайтно, что устанит проблему. Минусы - падение производительности и обльшой объем кода для рефакторинга.
2) возложить на ОС обработку исключений выравнивания, чтоб она в обработчике сама довыбрала побайтно то, что не удалось программе. в QNX и Linux вроде есть такое. Минусы - думается мне, чудовищное падение производительности. Плюс - портирование достается даром
3)полный рефакторинг кода с учетом платформенных особенностей. Минусы - объем работы. Плюсы - хорошая производительность.
Собсвенно тема для обсуждения - а есть ли какие-либо методики и книжки на тему подобного портирования? Может кто-то поделиться опытом, по какому пути стоит идти.
ЗЫ Есть вроде новые армы, которые позволяют выборку невыровненных данных, с потерей 1 машинного такта, но ,в данном случае, в ТЗ не упихиваются по цене.