代码之家  ›  专栏  ›  技术社区  ›  Brendan Long

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

  •  4
  • Brendan Long  · 技术社区  · 16 年前

    我正在编写一个Linux程序,它目前可以在x86和x86_64上编译并正常工作,现在我想知道我是否需要做一些特殊的工作来使它在其他架构上工作。

    我听说,对于跨平台代码,我应该:

    • 不要假设任何关于指针大小、int或大小的内容
    • 不要假设字节顺序(我不做任何位移动——我假设GCC会为我优化两个乘法/除法的能力)
    • 不要使用装配块(明显)
    • 确保你的库能正常工作(我使用的是sqlite、libcurl和boost,它们看起来非常跨平台)

    还有什么我需要担心的吗?我目前没有针对任何其他架构,但我希望在某个时候支持ARM,我认为如果可以的话,我也可以让它在任何架构上工作。

    另外,关于字节顺序的第二点,我需要对文本输入做什么特殊的事情吗?我用读文件 getline() 因此,这似乎也应该是自动完成的。

    1 回复  |  直到 16 年前
        1
  •  3
  •   WhirlWind    16 年前

    根据我的经验,一旦代码在几个体系结构上运行良好,它将更容易移植到第三个体系结构。输入不应该是问题。如果在对齐是一个问题的情况下进行任何操作,则结构对齐可能是一个问题。

    注意任何可能依赖于平台的东西:依赖于以相同方式对齐的位域,假设变量是特定的大小等。如果您的代码相对抽象于硬件,您可能会遇到一些问题。如果您使用网络代码之类的东西进行操作,则必须确保与网络字节顺序正确对齐。

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

    当然,唯一确定的方法就是尝试一下。