inline 函数

inline函数用于优化小而频繁调用的函数,减少函数调用开销。它在编译阶段展开,检查参数类型,而#define在预编译阶段展开,不检查类型。即使在-O0优化级别,inline可能不被展开,但使用__attribute__((always_inline))可强制内联。对于通过函数指针调用的inline函数,仍会生成汇编代码。
摘要由CSDN通过智能技术生成

inline 函数 在c 中是为了解决 有一些小而且频繁调用的 函数儿设计的。 这样做的目的是为了较少 function call 的调用 减少。 函数调用会在栈区 申请空间 调用完成后 释放空间。 如果平凡调用函数会加大cpu 的 负载。所以应用inline 函数就可以解决 这个问题。提高效率。

那么inline 函数的展开和define 展开有什么不同。

  1. define 的展开在预编译阶段, -E 而 inline 函数在编译阶段展开 -c

  1. define 无论 gcc -O 优化又没有开 都会执行展开。 而 inline 函数不一定 在 如下图。

  1. define 不检查 参数类型 而 inline 是要检查参数类型的。

所以综合来讲:

在 C语言程序开发中,建议把那些对时间要求比较高,且C语言代码长度比较短的函数定义为 inline 函数,这么做常常可以提升程序的效率。在默认的 -O0 编译优化项不能确保 inline 一定起作用,但是可以添加添加 __attribute__((always_inline))强制编译器对 inline 函数做相应的处理。因为 inline 函数会将自己展开,所以编译器通常不会再为 inline 生成汇编代码,不过,如果是通过函数指针的形式调用 inline 函数,编译器为了获得 inline 函数的地址,仍然会为其生成汇编代码的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值