news 2026/2/23 7:32:00

关于内联函数的理解学习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
关于内联函数的理解学习

1.什么是内联函数:以空间换时间

编译器在编译阶段,会对内联函数进行语法分析和类型检查。如果确认安全且有性能收益,编译器会将函数体直接嵌入到调用处,就像把代码拷过去一样,但带有完整的类型安全机制。

2.内联函数如何减少调用开销

(1)我们先来看普通函数的调用,这涉及到栈帧操作:

  • 保存现场:把当前的寄存器值、返回地址压入栈。

  • 参数传递:把参数压入栈或放入寄存器。

  • 跳转:指令跳转到函数代码地址。

  • 执行:运行函数体。

  • 恢复现场:弹出栈,恢复寄存器,跳转回原来的位置。

(2)而内联函数,如果编译器决定执行内联(编译器也有可能不执行内联,即使你声明了,他会有一个开销判断),就会直接省略前几步,将第 4 步函数体本身插入在主流程中。

3.编译器具体是怎样优化内联函数的呢?

(1)替换

将目标函数体代码直接替换主函数的调用节点,并且用实参替换形参。这样一来,“函数调用”这个概念消失了,取而代之的是平铺直叙的指令序列。

(2)连锁优化:暴露上下文信息,让编译器能进行常量折叠、死代码消除等更高级的优化。

以下面这个代码为例:

// 简单的内联函数 inline int square(int x) { if (x < 0) return 0; // 假设负数返回0 return x * x; } void businessLogic() { int val = 10; int result = square(val); // 调用处 }

(1)代码展开: 编译器先把代码变成这样:

int val = 10; int result; if (val < 0) result = 0; else result = val * val;

(2)常量传播 (Constant Propagation): 编译器发现val10,是已知的常量。它会把10代入后续计算:

if (10 < 0) ... // 编译器发现 10 < 0 永远为 false else result = 10 * 10;

(3)死代码消除 (Dead Code Elimination): 既然10 < 0永远为假,那个if分支就是“死代码”,直接砍掉。

result = 10 * 10;

(4)常量折叠 (Constant Folding)10 * 10可以在编译期算出结果100

int result = 100;

4.并不是所有函数都可以内联

  • 函数体过大:如果函数有 100 行代码,内联 10 次,代码体积就膨胀 1000 行。这会导致最终的可执行文件变大,更糟糕的是会撑爆 CPU 的指令缓存,导致 Cache Miss 率飙升,反而变慢。

  • 递归函数:如果是无限递归,编译器没法内联(无法展开无穷次)。当

  • 虚函数:虚函数通常需要在运行时查表(虚函数表 )决定调用哪个,编译期不知道调用谁,所以很难内联。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/18 1:15:50

深入解析:Wyn商业智能软件有哪些自助分析功能?

深入解析&#xff1a;Wyn商业智能软件有哪些自助分析功能&#xff1f; 一、引言&#xff1a;什么是真正的企业级自助式BI&#xff1f; 真正的自助式BI&#xff0c;远非简单的拖拽图表。它是一套覆盖数据准备、探索分析、协作共享与安全管控全流程的赋能力量&#xff0c;旨在让业…

作者头像 李华
网站建设 2026/2/17 19:24:58

【期末复习】

文章目录项目结构文章介绍1.案例Algorithm012.案例Algorithm023.案例lgorithm034.案例Algorithm045.案例Algorithm05项目结构 文章介绍 期末复习重点案例&#xff08;算法题&#xff09; 1.案例Algorithm01 要求&#xff1a;使用冒泡排序算法对数组a{9, 7, 4, 6, 3, 1,10}&a…

作者头像 李华
网站建设 2026/2/23 6:52:37

35岁程序员必看!智能体开发:你的职场第二曲线,建议收藏

35岁已成为IT从业者的职场危机&#xff0c;AI和年轻一代的竞争使传统经验优势减弱。智能体(Agent)作为解决方案&#xff0c;开发门槛低&#xff0c;有经验的程序员可快速掌握。当前市场极度缺乏智能体开发人才&#xff0c;为35IT人提供了升职加薪的新机会。这项技术让经验重新获…

作者头像 李华
网站建设 2026/2/19 4:30:30

solov2_r101-dcn_fpn_ms-3x_coco_小麦叶片病害检测与识别

1. 基于改进DCN的SOLOv2小麦叶片病害检测算法研究 在现代农业发展过程中&#xff0c;小麦作为我国主要的粮食作物&#xff0c;其健康生长直接关系到国家粮食安全。然而&#xff0c;小麦叶片病害的早期检测与识别一直是农业生产中的难点问题。传统的人工检测方法效率低下、主观…

作者头像 李华
网站建设 2026/2/18 12:07:57

EasyGBS智慧图书馆视频监控解决方案

在数字化和智能化浪潮的推动下&#xff0c;现代图书馆正从传统的文献收藏中心向知识服务和智慧学习空间转型。然而&#xff0c;随着服务功能的扩展和读者人数的增加&#xff0c;图书馆在安全管理、资源优化、服务提升等方面面临新的挑战。国标GB28181算法算力平台EasyGBS&#…

作者头像 李华