C中的内联实际上如何减慢这个程序的速度?

Jus*_*eel 1 c compiler-construction gcc compiler-optimization

为了迫使不被内联这是耗时运行时的46%的功能,我用__attribute__((noinline))的它,并编译的代码gcc -Wall -Winline -O2(这些加-g有什么使用的Makefile文件-我也看到了大致相同的效果使用时,-g如好吧)使用gcc 4.5.2.我发现具有非内联功能的程序比原始程序快20%以上.有谁知道为什么会这样?

让我提供一些更多细节.发生这种情况的程序是Linux 的压缩实用程序bzip2的最新版本.程序中的关键功能(在compress.c中找到generateMTFValues)是执行Move To Front变换的功能.该功能仅由程序中的一个功能调用.

有没有人知道为什么程序在这种情况下运行得更快,因为强制编译器不要内联这个函数?该函数只接受一个参数 - 一个指向包含所有块和压缩信息的结构的指针.此外,它只调用另一个不会消耗任何实质处理时间的功能.

Axe*_*ing 6

它可以减慢程序的速度,因为生成的代码更大,并且可能导致更多的CPU指令缓存未命中.