私が受講したクラスのトレーニング教材は、2 つの相反する内容を述べているようです。
一方では:
「インライン関数を使用すると、通常、実行が高速になります」
一方で:
「インライン関数を使用すると、スワッピングが頻繁になるため、パフォーマンスが低下する可能性があります」
質問 1:両方のステートメントは正しいですか?
質問 2:ここでの「交換」とは何を意味しますか?
このスニペットを見てください:
int powA(int a, int b) {
return (a + b)*(a + b) ;
}
inline int powB(int a, int b) {
return (a + b)*(a + b) ;
}
int main () {
Timer *t = new Timer;
for(int a = 0; a < 9000; ++a) {
for(int b = 0; b < 9000; ++b) {
int i = (a + b)*(a + b); // 322 ms <-----
// int i = powA(a, b); // not inline : 450 ms
// int i = powB(a, b); // inline : 469 ms
}
}
double d = t->ms();
cout << "--> " << d << endl;
return 0;
}
質問 3:powA
と の間でパフォーマンスが非常に似ているのはなぜpowB
ですか? powB
結局のところ、インラインであるため、パフォーマンスは 322 ミリ秒になると予想していました。