gcc与可重入代码

gcc与可重入代码,gcc,embedded,real-time,reentrancy,Gcc,Embedded,Real Time,Reentrancy,GCC是否为所有场景生成可重入代码?否,您必须编写可重入代码。否,GCC不可能保证您编写的可重入代码 但是,在主要平台上,编译器生成或包含的代码(如数学内部函数或函数调用)是可重入的。由于GCC不支持常见的不可重入函数调用的平台,如8051,因此存在可重入性编译器问题的风险很小 有些GCC端口存在bug和问题,例如MSP430版本。可重入性不是编译器可以控制的,而是由程序员编写可重入代码。为此,您需要避免所有明显的陷阱,例如全局变量(包括本地静态变量)、共享资源、线程、对其他不可重入函数的调用等

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

否,您必须编写可重入代码。

否,GCC不可能保证您编写的可重入代码

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


有些GCC端口存在bug和问题,例如MSP430版本。

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


已经说过,一些小型嵌入式系统的交叉编译器(例如8051)可能不会默认生成可重入代码,并且可能需要通过特定的函数来请求可重入代码,例如通过C++ >代码> >代码>。为可重入性编写函数代码仍然是您的责任

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

您可能会读到一些文章:


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

不,GCC不保证您编写的代码是可重入的。下面是编写可重入代码的好链接


你的意思是说有GCC工具链支持可重入代码,但存在一些问题?但是,有没有生成可重入代码的GCC变体?这个查询是因为我在开发与uC/OS-II RTOS相关的应用程序时遇到了一个信息,它需要有一个生成可重入代码的C编译器。确切地说,使用gcc编译x86、arm和sparc上可重入的代码一点问题都没有。