Упаковка данных, в частности выравнивание, может влиять на портирование приложений с x86 на ARM. 12
В x86 доступ к невыровненным данным не вызывает проблем, в то время как в ARM это либо создаёт исключение, либо (в более поздних версиях) замедляет выполнение кода. 2 Обычно о выравнивании заботится компилятор, но нужно быть осторожным при использовании ассемблера или упакованных структур. 2
Некоторые способы решения проблемы:
- Переопределение указателей для компилятора как packed. 1 Это позволяет компилеру вынимать память побайтно, что устраняет проблему. 1 Однако у такого подхода есть минусы: падение производительности и большой объём кода для рефакторинга. 1
- Возложение на ОС обработки исключений выравнивания. 1 ОС должна довыбирать побайтно то, что не удалось программе. 1 Этот способ также может привести к падению производительности. 1
- Полный рефакторинг кода с учётом платформенных особенностей. 1 Это может потребовать большого объёма работы, но в итоге может обеспечить хорошую производительность. 1
Для обеспечения одинакового выравнивания памяти на платформах x86 и ARM можно использовать параметр компилятора GCC -malign-double. 3