是否有一个实际的例子,其中内联对C程序的性能有害?

Mai*_*tor 11 c optimization performance inline-functions

在关于inline函数声明中的关键字的许多争论中,有人会指出它在某些情况下实际上会使程序变慢 - 主要是由于代码爆炸,如果我是正确的.我自己从未在实践中遇到过这样的例子.什么是实际代码,使用inline可能会对性能有害?

Art*_*Art 20

整整10年和前一天我在OpenBSD中做了这个提交:

http://www.openbsd.org/cgi-bin/cvsweb/src/sys/arch/amd64/include/intr.h.diff?r1=1.3;r2=1.4

提交消息是:

deinline splraise,spllower和setsoftint.使内核更小更快.deraadt @ ok

据我所知,内核二进制缩小了超过100kB并且没有一个测试用例可以生成变得更慢并且几个宏基准测试(比如编译内核)明显更快(如果我没记错的话,5-10%,但不要引用我的话.

大约在同一时间我开始尝试在OpenBSD内核中实际测量内联函数.我找到了一些性能上升幅度最小的产品,但是大多数产品都有0次可衡量的影响,而且有些产品的速度慢得多,并且被杀死了.至少还有一个非内联产生了巨大的影响,其中一个是内部malloc宏(其中的想法是内联malloc,如果它在编译时具有已知的大小)和数据包缓冲区分配器,它将内核缩小了150kB并具有显着的性能改进.

有人可以推测,虽然我没有证据,但这是因为内核很大,我们在执行系统调用时很难留在缓存中,而且每一点都有帮助.那么在这些情况下实际帮助的只是二进制文件的缩小,而不是执行的指令数量.

  • 删除内联的类似更改也是在几年前在linux内核中完成的. (2认同)