【发布时间】:2020-09-01 17:47:20
【问题描述】:
/Oi 允许 VC++ 编译器使用内在函数。 gcc 9 或 10 中的等价物是什么?
gcc -O3 编译器选项会启用内部函数吗?
【问题讨论】:
标签: gcc visual-c++ compiler-optimization
/Oi 允许 VC++ 编译器使用内在函数。 gcc 9 或 10 中的等价物是什么?
gcc -O3 编译器选项会启用内部函数吗?
【问题讨论】:
标签: gcc visual-c++ compiler-optimization
您搜索的是内置函数。
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
【讨论】: