当前位置: 首页 > 知识库问答 >
问题:

为什么优化内联函数比普通函数容易?

高兴贤
2023-03-14

我正在阅读每个程序员都应该知道的内存https://people.freebsd.org/~lstewart/articles/cpumemory.pdf,它说内联函数使你的代码更可优化

例如
:特别是函数的内联允许编译器一次优化更大的代码块,这反过来又可以生成机器代码,从而更好地利用处理器的管道架构

and:
当程序的较大部分可以被视为单个单元时,代码和数据的处理(通过死代码消除或值范围传播等)效果更好。

这也是:
如果一个函数只被调用一次,它也可以被内联。这使编译器有机会执行更多优化(如值范围传播,这可能会显著改进代码)。

读完这些之后,对我来说,至少内联函数似乎更容易优化,但是为什么呢?为什么内联的东西更容易优化?

共有1个答案

仇浩旷
2023-03-14

优化内联函数比使用概述更容易完成更好的工作的原因是,您知道调用函数的完整上下文,并且可以使用此信息来调整生成的代码以匹配此确切上下文。这通常允许为函数的内联副本和调用函数提供更有效的代码。可以优化调用者和被调用者以使其以概述函数无法实现的方式相互匹配。

 类似资料:
  • Nicolai Josuttis在其著作《C标准库(第二版)》中指出,与普通函数相比,编译器可以更好地优化lambdas。 此外,C 编译器优化 lambda 的效果比普通函数更好。(第213页) 这是为什么呢? 我想当涉及到内联时,应该不会再有任何区别了。我能想到的唯一原因是编译器可能有更好的lambdas本地上下文,这样可以做出更多假设并执行更多优化。

  • 问题内容: jQuery如何使用普通的JavaScript?例如, 什么是JavaScript的方式来询问是否有? 问题答案: 您可以检查是否匹配。 匹配一个单词中断。 或者,您可以使用jQuery自己的实现: 为了回答您的更一般性的问题,您可以在github上查看jQuery的源代码,或者在此源代码查看器中专门查看源代码。

  • 问题内容: (这个问题是关于如何使multiprocessing.Pool()运行代码更快。我终于解决了它,最终的解决方案可以在文章的底部找到。) 原始问题: 我正在尝试使用Python将一个单词与列表中的其他单词进行比较,并检索最相似的列表。为此,我使用了difflib.get_close_matches函数。我正在使用Python 2.6.5的相对较新且功能强大的Windows 7便携式计算机

  • 函数是一个可以重复使用的代码块,CPU 会一条一条地挨着执行其中的代码。CPU 在执行主调函数代码时如果遇到了被调函数,主调函数就会暂停,CPU 转而执行被调函数的代码;被调函数执行完毕后再返回到主调函数,主调函数根据刚才的状态继续往下执行。 一个 C/ C++ 程序的执行过程可以认为是多个函数之间的相互调用过程,它们形成了一个或简单或复杂的调用链条,这个链条的起点是 main(),终点也是 ma

  • 从软件工程角度看,将程序实现为一组函数很有好处,但函数调用却会增加执行时的开销。 C++ 提供了内联函数 (inline function) 可以减少函数调用的开销,特别是对于小函数。函数定义中函数返回类型前面的限定符inline指示编译器将函数代码复制到程序中以避免函数调用。其代价是会产生函数代码的多个副本并分别插入到程序中每一个调用该函数的位置上(从而使程序更大),而不是只有一个函数副本(每次