为了强制不内联消耗 46% 运行时间的函数,我在其上使用了 __attribute__((noinline))
并使用 gcc 编译了代码 - Wall -Winline -O2
(这些加上 -g
是 Makefile 使用的 - 我在使用 -g
时也看到了大致相同的效果)使用 gcc 4.5.2。我发现使用非内联函数的程序比原来的程序快了 20% 以上。有谁知道为什么会这样?
让我提供更多细节。发生这种情况的程序是最新版本的压缩实用程序 bzip2对于 Linux。程序中的关键函数(在 compress.c 中找到的 generateMTFValues)是执行 Move To Front 转换的函数。该函数在程序中仅被一个函数调用。
有没有人知道为什么在这种情况下通过强制编译器不内联此函数程序运行得更快?该函数只接受一个参数——一个指向包含所有 block 和压缩信息的结构的指针。此外,它只调用一个实际上不会消耗任何大量处理时间的函数。
最佳答案
它会减慢程序速度,因为生成的代码会更大并且会导致更多 CPU 指令缓存未命中。
关于c - C 中的内联实际上是如何减慢该程序的速度的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5874681/