代码之家  ›  专栏  ›  技术社区  ›  David Weng

内联装配会影响可移植性吗?

  •  4
  • David Weng  · 技术社区  · 16 年前

    假设您编写了一个可移植的C++代码,它在不同的平台上运行流畅。为了进行一些修改以优化性能,可以在代码中使用内联程序集。这是一个好的实践(编译器优化放在一边)还是会给可移植性带来麻烦?

    4 回复  |  直到 16 年前
        1
  •  6
  •   Jerry Coffin    16 年前

    很明显,内联程序集甚至还不具备可移植性。要保持任何可移植性,通常必须使用 #ifdef

    我自己的偏好是将汇编语言分离到一个单独的文件中,并在makefile中决定是构建可移植版本还是汇编语言版本。

        2
  •  13
  •   anon anon    16 年前

        3
  •  2
  •   Clark Gaebel    16 年前

        4
  •  2
  •   Michael    16 年前

    另一个明显的选择是只在某些架构上实现内联汇编,并将原始(未优化)C++保留到任何其他体系结构,而不是试图为所有体系结构生成程序集。适当地#ifdefed,当然。)然后您可以在一个架构上获得优化的好处,在所有架构上都有基本的功能。

    然而,当我们在过去的项目中做过这件事时,这是最难维护的部分-其他代码块会发生变化,并且正被传递到隔离函数中的东西会改变,原来的C++和程序集将不再匹配,并且有很多的哀嚎和咬牙。