<function number =“”of =“”lines =“”>和<times function =“”called =“”>被认为与内联成反比?</times> </function>

时间:2014-10-10 20:36:52

标签: c++

我知道inline适合几次调用的小身体功能。如果呼叫数量增加,则可能导致超大代码。但是,仅仅召唤几次的大型身体功能怎么样?

我主要感谢inline - 在main()的while循环中只调用一次的大型函数。这个功能实际上是核心所以它是程序的90%,如上所述,每个tick执行一次 我认为编译器在编写inline时没有问题,就像我自己在while中编写它一样。相反,我在其他地方定义它并在while中调用它。

编辑:
我很清楚inline更多的是编译器决策而不是用户,甚至可以内联非指定的inline函数,因此用户控制几乎可以忽略不计。但这是一个原则问题加上在这个特殊情况下它可以很好地服务。

4 个答案:

答案 0 :(得分:1)

合理的想法。有许多编译器可以生成链接时代码。那些可以看到你的函数只有一个调用者,并且内联它。

然后,再次,因为这需要生成链接时代码,inline关键字无论如何都不是那么有用。

答案 1 :(得分:0)

内联函数(如果它实际上是内联的)与将所有代码复制到您调用函数的位置完全相同。因此,您可以很容易地想象代码有多大。

同样,inline语句对编译器来说是一个暗示,这个函数可以更好地内联到调用它的代码中。但是根据情况,编译器可能会决定不对其进行内联 - 如果它认为这会更好。

您也可以找到有用的this short faq about an inline functions

答案 2 :(得分:0)

内联函数是一些简单的函数,你不能在另一个文件中编写,例如example.cpp,并将它包含在主要的类文件中,你可以在{... 1}}函数前面写一下你写的函数&#34; inline&# 34;并且编译器将看到它在类中写入。这就是我所知道的oop方式。对于包含while,foor,while while循环的函数来说,它需要在类函数之外编写,而不是在内联函数中。这是编码风格的问题。

答案 3 :(得分:0)

你可能会用inline咆哮错误的树。无论是否使用inline,您都需要对代码进行分析,以了解效果的真实含义。如果我是一个赌博的人,(我是),我敢打赌它提高性能,而且可能会使性能变差。

inline告诉编译器你将喜欢函数调用在调用时被内联替换,但编译器可以自由地忽略你的请求。回到几年前,使用inline作为性能提升是相当普遍的 - 有时它会产生有益的效果,有时它并没有。然而,现在编译器已经非常善于优化代码,试图在这方面超越编译器是愚蠢的。在优化代码时,编译器要比你好得多。

此外,这些天编译器会非常积极地忽略您的请求,以在调用站点内联函数实现。大多数inline请求都会被忽略。在今天的硬件上,考虑到性能,这通常是一件好事。内联函数实际上可能会以您可能没有意识到的方式阻碍性能。

现在,inline不是表演工具。相反,它是完全不同的东西。从标准,第7.1.2 / 4节:

  

应在每个翻译单元中定义内联函数   它是使用过的,并且每个都有完全相同的定义   案例(3.2)。 [注意:可能会遇到对内联函数的调用   在其定义出现在翻译单元之前。 - 注意]如果   函数的定义出现在它之前的翻译单元中   第一次声明为内联,该程序是不正确的。如果一个功能   与外部链接在一个翻译单元中内联声明,它   应在其出现的所有翻译单位内联宣布;   无需诊断。具有外部链接的内联函数   在所有翻译单元中具有相同的地址。一个静态的本地   外部内联函数中的变量总是指相同的   宾语。 extern内联函数体中的字符串文字是   不同翻译单元中的同一对象。 [注意:一个字符串   出现在默认参数中的字面值不在   内联函数仅仅因为表达式在函数中使用   从内联函数调用。 -end note]中定义的类型   外部内联函数的主体在每个中都是相同的类型   翻译单位。