将C ++ x86代码移植到ARM处理器有哪些主要注意事项?
我知道/听说过的人(但我不知道他们是不是真的有问题,甚至是真的 - 请核实):
程序员应该注意的任何其他差异和陷阱?
答案 0 :(得分:16)
任何体面的编译器都支持ARM上的64位数学运算,因此可能没有必要减少变量的范围。但是,ARM 本身是 32位,所以如果你不需要全范围,那么使用32位变量会更快。同样,32位变量比8位和16位变量快,所以如果你有任何char
或short
循环计数器,可能值得将它们更新为{{1} } s(或者更好,int
s)。
可能会让你感到震惊的另一件事是签名/无符号变量。直到最近,ARM还没有加载/存储签名unsigned int
的快速指令,因此传统上char
在ARM上是无符号。如果您的代码依赖于char
的签名,则可能会遇到一些问题。快速修复可能是将编译器开关用于签名字符,但在使用库函数时要小心。此外,签名char
在旧版芯片上会更慢。
编辑:我在Debian Wiki上偶然发现great page。它主要涉及从旧的ARM ABI到EABI的移植,但提到的很多内容仍然适用于x86-> ARM。它还链接到一个很好的FAQ about structure alignment(尽管它对于ARMv6 / v7来说并不完全正确)。