gcc和可重入代码

时间:2010-06-13 06:29:14

标签: gcc embedded real-time reentrancy

GCC是否为所有方案生成可重入代码?

6 个答案:

答案 0 :(得分:4)

不,你必须编写可重入的代码。

答案 1 :(得分:2)

Reentrancy是ISO C和C ++能够设计的,因此包括GCC。编码可重入函数仍然是您的责任。

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

您可能会阅读的一些文章:

答案 2 :(得分:2)

否,GCC不保证您所编写的代码。这是编写重入代码的好链接。

https://www.ibm.com/support/knowledgecenter/en/ssw_aix_71/generalprogramming/writing_reentrant_thread_safe_code.html

答案 3 :(得分:1)

重新入侵不是编译器可以控制的东西 - 程序员可以编写可重入代码。要做到这一点,你需要避免所有明显的陷阱,例如全局(包括本地静态变量),共享资源,线程,对其他非重入函数的调用等。

话虽如此,一些用于小型嵌入式系统的交叉编译器,例如: 8051,默认情况下可能不会生成可重入代码,您可能需要通过以下方式请求特定功能的可重入代码。 #pragma

答案 4 :(得分:1)

GCC至少在其编译的大多数平台上生成可重入代码(特别是如果您避免按值传递或返回结构)但是特定语言或平台ABI可能会另外规定。你需要更具体地说明任何更有说服力的陈述;我知道如果被编译的代码本身基本上是可重入的,那么它在桌面处理器上肯定是可重入的(当然,奇怪的全局状态技巧会让你在任何平台上遇到麻烦)。

答案 5 :(得分:0)

不,GCC不可能保证你写的重入代码。

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

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