509 字
3 分钟
inline内联函数速解
2024-04-11
2026-03-30
无标签

inline内联的效果

#include <stdio.h>
inline int max(int x, int y) {
return x > y ? x : y;
}
int main() {
int a = 5, b = 10;
int m = max(a, b);
printf("The maximum value is %d\n", m);
return 0;
}

当编译器决定将max函数内联时,它会在编译时期将函数调用替换为函数体,相当于直接在调用处写入了函数的内容。替代后的代码会看起来像这样:

#include <stdio.h>
int main() {
int a = 5, b = 10;
// 内联展开后的代码
int m = a > b ? a : b;
printf("The maximum value is %d\n", m);
return 0;
}

优势

通过将函数内联,编译器在编译时会将函数调用处直接替换为函数体本身的代码,而不是按照常规的函数调用过程(即,保存当前执行点、跳转到函数入口、执行函数、返回到调用处继续执行)来执行。

  1. 减少函数调用的开销:由于不需要进行函数调用的正常流程,因此可以减少一些执行上的开销,如参数传递、栈帧管理等。
  2. 提高程序执行速度:直接替换代码可以让编译器更好地进行优化,比如更有效地利用寄存器、更好地预测分支等,从而提高程序的执行速度。
  3. 增加编译器优化的机会:内联函数由于在编译时就展开了,编译器可以根据具体的调用上下文来对代码进行进一步优化。

劣势

过度使用内联可能会导致代码体积的增加(因为每个调用点都替换为了函数体,直观感觉就是代码量激增,占用的存储就多了),这在某些情况下可能会影响程序的性能(比如,增加缓存的压力)。

注意事项

inline关键字只是向编译器提出一个建议,是否进行内联,以及内联的方式,最终决定权在编译器。

inline内联函数速解
/posts/inline内联函数速解/
作者
唐承乾
发布于
2024-04-11
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

Personal Site
唐承乾
Profile Image of the Author
技术笔记、长期专题与电子书草稿

嵌入式 & AI 工作流。螺旋式学习,把踩过的坑整理成以后还能复用的东西。

GitHub 知乎
CSDN