为什么GCC不在严格模式下使用内置函数?

时间:2012-05-20 19:22:13

标签: optimization gcc

以严格模式-std=c...运行时的GCC disables lots of builtins

  

外部严格的ISO C模式(-ansi,-std = c90,-std = c99或-std = c11),   函数_exit,alloca,bcmp,bzero ... stpcpy,...可以作为。处理   内置功能。所有这些功能都有相应的版本   以_ 内置为前缀,即使在严格的C90模式下也可以使用。

有什么理由吗?内置组件不符合要求吗?或者这是因为标准说当你打电话给memcpy时它实际上应该调用它并且我无法进行优化?

如果我使用-std=gnu*重新编译它,我觉得我的代码肯定会运行得更快,因为它会启用更多optimizations

  

GCC通常会生成特殊代码来处理某些内置函数   功能更有效;例如,对alloca的调用可能会变成   单个指令直接调整堆栈,并调用   memcpy可能会成为内联复制循环

1 个答案:

答案 0 :(得分:4)

{C}标准中未定义_exitallocabcmpbzerostpcpy或该列表中的任何其他功能,所以它们不应该由符合C的编译器定义;这些名称必须可供用户使用,以获取自己的标识符。

请注意,许多其他内置函数仍然在严格的ISO模式下启用。例如,memcpy被“识别为[a]内置[函数],除非指定-fno-builtin