C++ GCC/Clang相当于英特尔ICC#pragma forceinline递归
clang/gcc是否有办法实现英特尔icc对C++ GCC/Clang相当于英特尔ICC#pragma forceinline递归,c++,c,gcc,C++,C,Gcc,clang/gcc是否有办法实现英特尔icc对#pragma forceinline recursive或类似的功能 指定语句中所有调用的内联 forceinlinepragma表示,只要编译器能够内联,就应该内联有问题的调用 recursive表示pragma应用于调用链中由这些调用递归调用的所有调用 这些是特定于语句的内联pragma。每个调用都可以放在C/C++语句之前,然后应用于语句中的所有调用以及嵌套在该语句中的语句中的所有调用 () 我不希望使用\uuuuuu属性((始终为内联)),
#pragma forceinline recursive
或类似的功能
指定语句中所有调用的内联
forceinline
pragma表示,只要编译器能够内联,就应该内联有问题的调用
recursive
表示pragma应用于调用链中由这些调用递归调用的所有调用
这些是特定于语句的内联pragma。每个调用都可以放在C/C++语句之前,然后应用于语句中的所有调用以及嵌套在该语句中的语句中的所有调用
()
我不希望使用\uuuuuu属性((始终为内联))
,因为它适用于函数。在我的例子中,函数并不是很小。我想让编译器来决定在大多数情况下何时内联它。此外,虽然该属性非常强,但它仍然不是“始终””。更改全局选项(如内联深度和大小限制)也不理想
然而,在某些特定的情况下,我知道内联函数会对性能产生很大的影响(在我的例子中,内联函数的影响是2倍)。英特尔的
#pragma inline/forceinline[recursive]
适用于单个语句,并具有我想要的效果。GCC或clang是否有任何类似的东西只能影响函数的特定调用站点?AFAIK GCC中没有这样的东西。如果您控制该函数,您可以将其主体放入\uuuu属性((始终\u内联))
函数中,然后提供“常规”版本,它只是始终\u内联版本的包装器。对于递归
功能,您可以尝试使用展平
属性执行类似的操作。如果您将调用站点考虑为始终内联函数,则展平属性可能是最接近的。谢谢。展平似乎很有用。感谢您编辑此问题以澄清“英特尔布拉格”@MatteoItalia@MatteoItalia这应该是一个答案。@MatteoItalia,请发表您的评论作为答案,这样我们就可以把这个问题从未回答的专栏中去掉。
#pragma forceinline [recursive]