Любой приличный компилятор поддерживает 64-битную математику в ARM, поэтому, возможно, нет необходимости уменьшать диапазон ваших переменных. Однако ARM изначально является 32-разрядным, поэтому, если вам не нужен полный диапазон, использование 32-разрядных переменных будет быстрее. Кроме того, 32-разрядные переменные быстрее, чем 8-разрядные и 16-разрядные, поэтому, если у вас есть счетчики циклов char
или short
, возможно, стоит обновить их до int
с (или лучше , unsigned int
с).
Порядковый номер, как правило, не является проблемой - большинство чипов ARM либо работают с прямым порядком байтов, либо могут переключаться между старшим и младшим порядковым номером. Что такое , проблема выравнивание . x86 очень простителен, когда вы получаете доступ к невыровненным данным. В ARM это либо создает исключение, либо (в более поздних версиях) замедляет ваш код. Об этом обычно заботится компилятор, но вам нужно остерегаться, если вы используете сборку или упакованные структуры.
Еще одна вещь, которая может сбить вас с толку - это переменные со знаком / без знака. До недавнего времени в ARM не было быстрых инструкций для загрузки / хранения подписанных char
с, поэтому традиционно char
это без знака в ARM. Если ваш код основан на подписи char
, у вас могут возникнуть некоторые проблемы. Быстрое решение может состоять в том, чтобы использовать переключатель компилятора для подписанных символов, но будьте осторожны при использовании библиотечных функций. Кроме того, подписанный char
будет медленнее на старых чипах.
Редактировать : Я только что наткнулся на отличную страницу в вики Debian. В основном это касается переноса из старого ARM ABI в EABI, но многие упомянутые вещи все еще применимы к x86-> ARM. Он также ссылается на хороший FAQ по выравниванию структуры (хотя это не совсем правильно для ARMv6 / v7).