考虑到你只想优化速度,有什么好的启发式方法来决定是否内联一个函数?显然,代码大小应该很重要,但当(比方说) gcc或icc决定是否内联函数调用时,是否有其他通常使用的因素?在这个领域有什么重要的学术研究吗?
发布于 2010-01-26 00:03:28
维基百科有关于这一点的a few段落,底部有一些链接:
带有JIT编译器和运行时类加载的语言有其他权衡,因为虚拟方法不是静态已知的,但JIT可以收集运行时分析信息,如方法调用频率:
A search on Google Scholar揭示了许多论文,例如
A search on Google Books透露了相当多的书籍,其中有关于各种上下文中函数内联的论文或章节。
发布于 2010-01-25 12:54:28
函数调用意味着一些额外的代码(函数序号,设置新的堆栈框架的位置,以及函数结尾处,它被清除)。如果您的编译器发现函数代码与前言和结尾相比较小,它可以确定不值得进行实际调用,并将内联函数。
我认为调用函数而不是内联函数的唯一好处是与大小相关。我猜内联一个函数,然后展开一个循环可能会导致一个显着的大小增加。
发布于 2010-01-25 13:02:32
据我所知,函数大小是编译器用来确定内联的唯一因素。然而,如果你做了概要引导优化(PGO),我相信编译器能够使用其他变量,比如调用次数/调用建立时间。
https://stackoverflow.com/questions/2130248
复制相似问题