C++ 05:内联函数(inline)——用代码展开换性能

C++ 05:内联函数(inline)——用代码展开换性能 内联函数是 C 为高频小函数设计的性能优化手段通过在编译期将函数调用直接替换为函数体代码消除函数调用开销。一、核心语法在函数返回类型前加inline关键字即可声明 / 定义内联函数inline 返回类型 函数名(参数列表) { // 函数体 }示例// 定义内联函数计算平方 inline int square(int x) { return x * x; } int main() { int a square(3); // 编译时会被替换为 int a 3 * 3; int b square(4); return 0; }二、普通函数 vs 内联函数1. 普通函数调用执行流程跳转到函数地址 → 执行函数体 → 返回调用点开销存在参数压栈、跳转、返回等额外成本反汇编特征存在call指令2. 内联函数调用执行流程编译期直接将函数体展开到调用位置开销无函数调用跳转执行效率更高反汇编特征无call指令直接是计算指令如imul示例// 普通函数调用 int a square(3); → call square // 内联函数展开 int a square(3); → int a 3 * 3;三、关键注意事项inline是请求而非命令编译器有权忽略inline标记函数体过大、有循环 / 递归时编译器通常拒绝内联调试模式下编译器也可能关闭内联以方便调试适用场景只适合功能简单、代码量小、被频繁调用的函数比如数学计算平方、绝对值简单 getter/setter工具类小函数声明与定义规则可在声明或定义前加inline两者选其一即可若函数有声明和定义建议在声明处加inline四、VS 中查看内联效果项目属性 → C/C → 常规调试信息格式设为「程序数据库 (/Zi)」项目属性 → C/C → 优化内联函数扩展设为「只适用于_inline (/Ob1)」调试 → 反汇编观察调用处是否存在call指令无call则说明内联生效五、总结内联函数的本质是用代码膨胀换执行效率✅ 优点消除函数调用开销提升高频函数性能❌ 缺点过度使用会导致可执行文件体积变大⚠️ 核心inline是给编译器的优化建议最终是否内联由编译器决定