大循环中的函数是否内联?

时间:2019-06-23 17:56:25

标签: c++ inline compiler-optimization

看下面的代码:

inline void someFunction() {
    //more than several lines of code
}

-----------------------

for (int i = 0; i < 1000000; ++i) {
    someFunction(/*several arguments*/);
}

我知道内联只是对编译器的建议,但是在这种情况下,编译器会内联代码吗?有可能知道吗?

如果函数很短,则内联可将代码以某种程度的大幅度提高速度,但是,如果函数很长,则内函数的范围会较小,并且编译器不太可能内联它。但是,如果必须调用该函数1 000 000次(一次循环),那么总时间中甚至有百分之几的我很快就用完了。因此,尽管我通常会为节省P的时间而放弃额外的M空间,但是这里节省的时间为1000000 * P,使比率更具吸引力。

在这里,编译器知道如果不内联代码,它将进行1 000 000次函数调用,因此它可以进行优化。但是如果是n次迭代该怎么办?我可能知道n会很大,并且内联是值得的,但编译器则不然。

如果我需要最大程度地执行此类代码,而无需在循环中复制代码,是否可以强制执行内联或等效行为?

是否有一种方法可以命令编译器始终内联函数或在代码中的特定点(调用)内联它(即,在此循环中内联它,否则将其留给编译器)?

主要问题是在n次循环迭代的情况下编译器是否可以优化(如果它甚至可以优化循环)?

0 个答案:

没有答案