内联展开 内联展开或称内联下文或交替使用是一种将函数体直接展开到调用处的一种优化技术它可以由手工指定如inline关键字或者经由编译优化自动完成内联展开类似于宏展开区别在于内联展开在编译时完成而宏展开则可能在预编译如CC编译时如Scheme运行时如Scheme时完成 内联是一种重要的优化技术内联的好处主要在于消除函数的调用开销压栈保护恢复现场但内联展开对于性能的提升不能一概而论它可能导致生成的代码体积膨胀并且影响指令缓存的命中率有研究表明函数内联展开在缓存小的时候能提升性能缓存较大的时候性能有可能下降 除此之外内联展开会引入大量冗余代码需要通过一系列编译优化步骤进行缩减比如一个记录或理解为结构体中的值是不变的那么可以将其值直接替换到引用处逻辑上不被使用到的分支代码或者变量会被自动消除掉逻辑上不可能进入的分支也可以消除掉通过这些优化可以极大缩减冗余的代码使得程序编译后获得较为紧凑的体量