建议gcc内联函数

建议gcc内联函数,gcc,inline,Gcc,Inline,我不知道这个问题有多可行,也不知道这个问题有多明智 我们是否可以在makefile中进行任何更改,以推荐GCC内联所有函数,尽管这些函数在声明过程中没有内联,或者在源文件中没有内联。GCC-finline\u functions选项听起来好像可以满足您的需要。这是。如果您的makefile定义了一个CFLAGS变量,那么它就是放置它的地方。gcc-finline\u函数选项听起来像是它可以做您想要的事情。这是。如果您的makefile定义了一个CFLAGS变量,那么它就是放置它的地方。有几种方法

我不知道这个问题有多可行,也不知道这个问题有多明智


我们是否可以在makefile中进行任何更改,以推荐GCC内联所有函数,尽管这些函数在声明过程中没有内联,或者在源文件中没有内联。

GCC
-finline\u functions
选项听起来好像可以满足您的需要。这是。如果您的makefile定义了一个CFLAGS变量,那么它就是放置它的地方。

gcc
-finline\u函数
选项听起来像是它可以做您想要的事情。这是。如果您的makefile定义了一个CFLAGS变量,那么它就是放置它的地方。

有几种方法可以生成gcc内联函数。其中之一是选项
-finline functions
,它将使gcc内联函数变得“简单”。编译器使用一些试探法来确定函数是否足够小,可以内联。但是,用户可以通过
-finline limit
控制此算法。阅读gcc手册,找到您需要的实际值

当内联函数时,您应该记住,显然不是所有函数都可以内联(最简单的例子是递归函数),编译器只能内联同一翻译单元中定义的函数。另外,值得一提的是,
-finline functions
-O3
默认情况下处于启用状态,因此有时只需
-O3
就可以了


在makefile中,您必须为所有对gcc的调用添加正确的选项。在一个编写良好的makefile中,您可以很容易地找到带有其他gcc选项的变量,在这里您可以简单地放置自己的变量。

有几种方法可以生成gcc内联函数。其中之一是选项
-finline functions
,它将使gcc内联函数变得“简单”。编译器使用一些试探法来确定函数是否足够小,可以内联。但是,用户可以通过
-finline limit
控制此算法。阅读gcc手册,找到您需要的实际值

当内联函数时,您应该记住,显然不是所有函数都可以内联(最简单的例子是递归函数),编译器只能内联同一翻译单元中定义的函数。另外,值得一提的是,
-finline functions
-O3
默认情况下处于启用状态,因此有时只需
-O3
就可以了


在makefile中,您必须为所有对gcc的调用添加正确的选项。在一个编写良好的makefile中,您可以很容易地找到带有其他gcc选项的变量,在这里您可以简单地放置自己的变量。

谢谢您的回答。我将尝试它,并不断更新。我尝试了你在这里提到的方式。它只适用于一个soruce代码文件。如果一些源代码文件确实包含在您使用
-finline函数编译的源代码文件中,那么编译器(以及您使用适当的选项)允许的所有内容都应该正确内联。但在实际情况中,文件是单独编译的,一个文件中定义的函数不会内联到另一个文件中,因为编译器在编译后一个文件时不知道它的定义。确保函数始终内联的唯一方法是将整个定义添加到头文件中,并确保它包含在使用该函数的所有文件中。你不能用Makefile来做。谢谢你的回答。我将尝试它,并不断更新。我尝试了你在这里提到的方式。它只适用于一个soruce代码文件。如果一些源代码文件确实包含在您使用
-finline函数编译的源代码文件中,那么编译器(以及您使用适当的选项)允许的所有内容都应该正确内联。但在实际情况中,文件是单独编译的,一个文件中定义的函数不会内联到另一个文件中,因为编译器在编译后一个文件时不知道它的定义。确保函数始终内联的唯一方法是将整个定义添加到头文件中,并确保它包含在使用该函数的所有文件中。你不能用Makefile来做。我试过你在这里提到的方法。它只适用于一个soruce代码文件。那么一系列相互包含的源代码文件又如何呢?@thetna:如果不知道你的项目是如何构造的,以及你迄今为止做了哪些尝试,那么很难说更多。但是MichałTrybus提出了一个很好的观点——函数内联不能跨翻译单元工作;函数定义必须在每个源文件中可用,例如,将函数定义放在.h文件中并包含在每个.c文件中。如果您的项目还没有这样的结构,-finline_functions选项将不会有多大作用,正如您所看到的…您需要重新排列代码。我尝试了您在这里提到的方法。它只适用于一个soruce代码文件。那么一系列相互包含的源代码文件又如何呢?@thetna:如果不知道你的项目是如何构造的,以及你迄今为止做了哪些尝试,那么很难说更多。但是MichałTrybus提出了一个很好的观点——函数内联不能跨翻译单元工作;函数定义必须在每个源文件中可用,例如,将函数定义放在.h文件中并包含在每个.c文件中。如果您的项目还没有这样结构化,-finline_functions选项将不会起到多大作用,正如您所看到的那样…您需要重新排列代码。从下面的评论来看,您似乎需要重新构造项目以使其正常工作。不妨退一步,考虑一下这是否真的是必要的。你有没有介绍过你的计划,并决定