当在严格模式 -std=c...
下运行时,GCC禁用了许多内建函数。
在非严格 ISO C 模式(-ansi、-std=c90、-std=c99 或 -std=c11)下,函数_exit、alloca、bcmp、bzero ... stpcpy 等函数可能被视为内建函数。所有这些函数都有对应的版本,以_builtin为前缀,即使在严格的C90模式下,也可以使用它们。
这是有原因的吗?这些内建函数不符合标准吗?还是因为标准规定当调用memcpy
时应该实际调用它,不能进行优化?
如果我使用-std=gnu*
重新编译代码,那么我的代码肯定可以更快地运行,因为它会启用一些优化
GCC通常会生成特殊代码来更高效地处理某些内建函数;例如,对alloca的调用可能成为直接调整堆栈的单个指令,对memcpy的调用可能成为内联复制循环