用于估计函数内联效益的c ++启发式算法

Mat*_*son 12 c++ optimization inlining

在c ++中,什么是一个很好的启发式方法来估计内联函数的计算时间优势,特别是当函数被非常频繁地调用并占计划执行时间的≥10%时(例如,暴力的评估函数或随机优化过程).即使内联可能最终超出我的控制范围,我仍然很好奇.

Jam*_*nze 6

没有一般的答案.它取决于硬件,参数的数量和类型,以及在函数中完成的操作.它被调用的次数和频率.例如,在Sparc上,参数(和返回值)在寄存器中传递,每个函数获得16个新寄存器:如果函数足够复杂,那么这些新寄存器可以避免在内联函数时发生溢出,并且非内联版本可能比内联版本更快.在一个寄存器很差的Intel上,并且在寄存器中传递参数,对于同一个程序中的相同函数,情况恰恰相反.更一般地说,内联可能会增加程序大小,减少位置.或者对于非常简单的功能,它可能会减少程序大小; 但这又取决于架构.唯一可能的方法是尝试两者,测量时间.即便如此,你只会知道那个特定的程序,在那个特定的硬件上.