【问题标题】:Why does GCC do not use builtins in strict mode?为什么 GCC 在严格模式下不使用内置函数?
【发布时间】:2012-05-27 10:24:37
【问题描述】:

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

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

有什么理由吗?内置函数不符合吗?或者这是因为标准说当你调用memcpy 时它实际上应该调用它并且我无法优化?

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

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

【问题讨论】:

    标签: optimization gcc


    【解决方案1】:

    _exitallocabcmpbzerostpcpy 或该列表中的任何其他函数均未在 C 标准中定义,因此它们不应由符合标准的 C 定义编译器;这些名称必须可供用户用作自己的标识符。

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

    【讨论】:

    • 哎呀,你是对的。我想我已经快速阅读了文档并混淆了功能列表。但你的解释仍然成立。谢谢。
    猜你喜欢
    • 2018-08-17
    • 1970-01-01
    • 2013-05-15
    • 2016-08-13
    • 2019-11-14
    • 2014-07-24
    • 2011-05-18
    • 2013-10-08
    相关资源
    最近更新 更多