移植到不同架构的潜在问题

我正在编写一个Linux程序,目前编译和x86和x86_64正常工作,现在我想知道是否有什么特别的,我需要做的,以使其在其他架构上工作。

我所听到的是,对于跨平台代码,我应该:

  • 不要假设任何有关指针的大小,int或size_t
  • 不要做字节顺序的假设(我不做任何移位 – 我假设gcc会优化我的两个乘法/除法的能力)
  • 不要使用组装块(显而易见)
  • 确保你的库工作(我正在使用SQLite,libcurl和Boost,这些都是跨平台的)

还有什么我需要担心的吗? 我目前不是针对任何其他架构,但是我希望在某个时候支持ARM,而且我想我可能还会在任何架构上工作。

另外,关于字节顺序的第二点,我需要做什么特别的文本input? 我用getline()读取文件,所以看起来应该自动完成。

根据我的经验,一旦代码在两个架构上运行良好,它将更容易移植到第三个架构。 输入不应该是一个问题。 结构对齐可能是一个问题,如果你做任何事情对齐是一个问题。

注意任何可能依赖于平台的东西:依赖于位域以相同的方式对齐,假设变量是特定的大小等等。如果你的代码相对于硬件是抽象的,你可能会遇到很少的问题。 如果你正在做一些类似网络代码的事情,你必须确保你正确地与网络字节顺序对齐。

我已经将设备驱动程序从PPC移植到x86,然后移植到x86_64; 在几千行中,可能有一些变化,主要与结构和整数排序有关。

当然,唯一知道的方法就是尝试一下。