第一,有简单的示例,其中内联所有内容的效果非常差。考虑以下简单的C代码:
void f1 (void) { printf ("Hello, world\n"); }
void f2 (void) { f1 (); f1 (); f1 (); f1 (); }
void f3 (void) { f2 (); f2 (); f2 (); f2 (); }
...
void f99 (void) { f98 (); f98 (); f98 (); f98 (); }
猜猜内联将对您产生什么影响。
接下来,您假设内联将使事情变得更快。有时候就是这种情况,但并非总是如此。原因之一是适合指令高速缓存的代码运行得快得多。如果我从10个地方调用一个函数,那么我将始终运行指令缓存中的代码。如果是内联的,则副本到处都是,并且运行慢得多。
还有其他问题:内联会产生巨大的功能。巨大的功能很难优化。通过将函数隐藏在单独的文件中以防止编译器对其内联,我在性能关键代码中获得了可观的收益。结果,隐藏这些函数时,为这些函数生成的代码要好得多。
顺便说一句。我没有“数百GB的内存”。我的工作计算机甚至没有“数百GB的硬盘空间”。而且,如果我的应用程序位于“数百GB的内存”中,则只需20分钟即可将应用程序加载到内存中。