代码之家  ›  专栏  ›  技术社区  ›  Karthik Balaguru

gcc与可重入代码

  •  -1
  • Karthik Balaguru  · 技术社区  · 14 年前

    GCC是否为所有场景生成可重入代码?

    5 回复  |  直到 14 年前
        1
  •  2
  •   Clifford    14 年前

    一个C编译器即使在为可重入性正确编码函数时也不会生成可重入代码,这将是一个例外,而不是一个规则,并且是由于体系结构约束的原因(例如没有足够的资源来支持堆栈,所以生成静态帧)。在这些情况下,编译器文档应该清楚地说明这一点。

        2
  •  4
  •   Gary    14 年前

        4
  •  1
  •   Paul R    14 年前

    可重入性不是编译器可以控制的,而是由程序员来编写可重入性代码。为此,您需要避免所有明显的陷阱,例如全局变量(包括本地静态变量)、共享资源、线程、对其他不可重入函数的调用等。

    尽管如此,一些用于小型嵌入式系统的交叉编译器(例如8051)在默认情况下可能不会生成可重入代码,您可能需要通过 #pragma .

        5
  •  1
  •   Donal Fellows    14 年前

    GCC至少在它编译的大多数平台上生成可重入代码(特别是在避免按值传递或返回结构的情况下),但是特定的语言或平台ABI可能会以其他方式指定。你将需要更具体的任何更具决定性的声明作出;我知道,如果正在编译的代码本身基本上是可重入的,那么它在桌面处理器上基本上是可重入的(当然,奇怪的全局状态技巧会在任何平台上给您带来麻烦)。

        6
  •  0
  •   Yann Ramin    14 年前

    但是,在主要平台上,编译器生成或包含的代码(如数学内部函数或函数调用)是可重入的。由于GCC不支持常见的不可重入函数调用的平台,例如8051,因此在可重入性方面出现编译器问题的风险很小。

    有些GCC端口有bug和问题,比如MSP430版本。