【问题标题】:What is the VC++ compiler option /Oi equivalent for gcc?gcc 的 VC++ 编译器选项 /Oi 等效项是什么?
【发布时间】:2020-09-01 17:47:20
【问题描述】:

/Oi 允许 VC++ 编译器使用内在函数。 gcc 9 或 10 中的等价物是什么?

gcc -O3 编译器选项会启用内部函数吗?

【问题讨论】:

    标签: gcc visual-c++ compiler-optimization


    【解决方案1】:

    您搜索的是内置函数。
    https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Other-Builtins.html

    内建默认启用:

    -fno-builtin
    -fno-builtin-function

    Don’t recognize built-in functions that do not begin with ‘__builtin_’ as prefix. See Other built-in functions provided by GCC, for details of the functions affected, including those which are not built-in functions when -ansi or -std options for strict ISO C conformance are used because they do not have an ISO standard meaning.
    
    GCC normally generates special code to handle certain built-in functions more efficiently; for instance, calls to alloca may become single instructions which adjust the stack directly, and calls to memcpy may become inline copy loops. The resulting code is often both smaller and faster, but since the function calls no longer appear as such, you cannot set a breakpoint on those calls, nor can you change the behavior of the functions by linking with a different library. In addition, when a function is recognized as a built-in function, GCC may use information about that function to warn about problems with calls to that function, or to generate more efficient code, even if the resulting code still contains calls to that function. For example, warnings are given with -Wformat for bad calls to printf when printf is built in and strlen is known not to modify global memory.
    
    With the -fno-builtin-function option only the built-in function function is disabled. function must not begin with ‘__builtin_’. If a function is named that is not built-in in this version of GCC, this option is ignored. There is no corresponding -fbuiltin-function option; if you wish to enable built-in functions selectively when using -fno-builtin or -ffreestanding, you may define macros such as:
    
    #define abs(n)          __builtin_abs ((n))
    #define strcpy(d, s)    __builtin_strcpy ((d), (s))
    

    https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options

    当您看到使用 O3 开启的优化时,并没有提到内置。 https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

    【讨论】:

      猜你喜欢
      • 2019-07-30
      • 1970-01-01
      • 2011-04-16
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多