大学在教科书上学习过inline函数,定义为inline函数之后,会省去函数调用的开销,直接嵌套汇编代码,取代函数调用,提高效率。工作后项目中也 很少用到inline来定义函数,近几天在研读google的google c++ style guide,发现之前自己对inline函数的认识太过肤浅了,这里学习总结一下。
1、inline函数不要超过10行代码,且不能包含循环、switch、if语句
2、在一个c文件中定义的inline函数是不能在其它c文件中直接使用,google推荐把inline函数定义在**-inl.h头文件中。
3、不要过度使用inline函数定义,尤其对大函数来说
上面三点说明如何正确的使用inline函数,我以前的时候对inline理解不透彻,使用inline的方式不正确,但现在编译器够先进,能保证错误的inline定义也可以正确编译、运行。可能会有性能的缺失。
我在F14(gcc 版本 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC))上做了个实验:
1、当inline函数超过10行,并且包含了循环、switch语句后gcc会执行inline语义,将inline函数汇编嵌入到main函数中。
//gcc n.c -O2 -S
#include
#include
//inline int inc_inline(volatile int *j);
inline int inc_inline(volatile int *j)
{
for (;*j < 100; (*j)++)
{
*j += 2;
(*j)++;
}
switch (*j)
{
case 1:
(*j)++;
break;
case 2:
(*j)++;
break;
default:
break;
}
return (*j)++;
}
int main(int argc, char *argv[])
{
volatile int i = 0;
inc_inline(&i);
printf(“i;%d\n”, i);
return 0;
}
2、当我把inline函数的定义放到另一个c文件中,在main函数文件中声明此函数,此时inline函数不生效,gcc编译出的汇编使用call进行正常的函数调用。
//gcc n.c a.c -O2 -S
3、当我们过度使用inline函数,会造成程序文件变大,性能降低。程序文件变大是肯定的,但为什么性能会降低呢,inline不是为了提高性能吗?使 用的方式不正确性能不能提高,反而会下降。现在的CPU上都有cache,紧凑的代码在chache中保存的时间更长,这样cache命中的机会更高。
如果某个A函数未定义为inline,并且被很多其它函数调用,那个这个A函数很大的可能会长期被保存在cahe中,这样CPU对代码的执行速度会提高很 多。如果A函数被定义为了inline函数,代码分散各个调用函数中,这样每次指定都不命中都需要去内存把代码拷贝到cache中,然后执行,造成很大的 抖动。
更深一层的理解,当函数整个函数编译为的汇编代码,函数调用的上下文切换占用了大多的时间的时候,可以考虑把此函数定义为inline函数。
c语言交流裙:1126743406交流一下经验
下面分享一些视频资料
C语言编程基础
C语言实现面向对象编程
Linux C语言高级开发
相关推荐
c语言中inline函数的作用
记录一下inline函数的作用 普通函数的调用过程 在eclipse里面创建工程,代码如下: #include <iostream> #include <vector> #include <cstring> #include <cassert> #include <algorithm> using namespace std; //__attribute__((always_inline)) inline int test(int x) int
【C语言】inline 关键字详解
inline关键字用于建议编译器将函数内联展开,以减少函数调用的开销。内联函数适用于简单、频繁调用的函数,能够提高程序的执行效率。
【每日一C之十三】C 语言inline内联函数
每日一C之include 每天拾一个C语言贝壳,厚积薄发,积跬步以致千里。 今日贝壳:C语言 inline内联函数的设立初衷与用法 初衷:引入inline内联函数的目的:减少函数调用的开销。在函数返回值前加限定词inline,编译器会在源文件适当的位置生成函数代码的副本,以避免函数调用。函数角度来看,相比inline,宏虽同样能
c语言inline有什么作用,C语言inline的用法
inline这个关键词,是从C99开始出现的。它要解决的问题很明确,对于那些短小精干频繁调用的函数,如果是inline的,编译的时候,函数调用位置会被替换成函数的代码块,省掉了函数调用的压栈出栈等操作,可以加快程序的执行速度,代价只是增加了一点点程序文件的体积。本文以gcc的inline行为为准。1, static inline这是最纯粹的inline用法,我们始终要记住,C语言的编译是按文件进行...
内联函数 —— C 中关键字 inline 用法解析
在C语言中,调用函数时,会进行函数入栈 ,执行,函数出栈的操作。这些操作执行都需要时间,并且函数入栈出栈 ,会消耗栈内存或栈空间。对于一些频繁调用且代码段不多的函数来说,在入栈出栈时占用很多时间和栈内存。为了解决这个问题,C语言引入了inline修饰符,表示为内联函数。看下面的例子这个就是内联函数的用法;在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来进行替换。这样做会增加目标程序的代码量,但是在执行过程中就没有函数入栈出栈的操作,减少了程序的执行时间。
C语言inline函数使用
一、简述: inline函数,定义为inline函数之后,会省去函数调用的开销,直接嵌套汇编代码,取代函数调用,提高效率。 在函数声明或定义中函数返回类型之前加上关键字inline。 比如:inline int min(int first,int second){ /***********/ }; 对于同一个程序的不同文件,如果inline函数出现的话,其定义必须相同。如果
C语言inline函数的使用方法
C语言inline函数的使用方法 2012-01-20 00:00中国IT实验室佚名 关键字:C语言 大学在教科书上学习过inline函数,定义为inline函数之后,会省去函数调用的开销,直接嵌套汇编代码,取代函数调用,提高效率。工作后项目中也很少用到inline来定义函数,近几天在研读google的google c++ style guide,发现之前自己对
C语言中__inline函数作用解释
C语言inline函数的使用方法2012-01-20 00:00 中国IT实验室 佚名 ..关键字:C语言 大学在教科书上学习过inline函数,定义为inline函数之后,会省去函数调用的开销,直接嵌套汇编代码,取代函数调用,提高效率。工作后项目中也很少用到inline来定义函数,近几天在研读google的google c++ style guide,发现之前自己对inline函数的认识太过
c语言 inline函数的总结,C语言陷阱与技巧第2节,使用inline函数可以提升程序效率,但是让inline函数生效是有条件的...
翻开 Linux 内核源代码,会发现内核在界说C言语函数时,有许多都带有 “inline”关键字,请看下图,那么这个关键字有什么效果呢?inline 关键字的效果在C言语程序开发中,inline 一般用于界说函数,inline 函数也被称作“内联函数”,C99 和 GNU C 均支撑内联函数。那么在C言语中,内联函数和一般函数有什么不同呢?其实,从 inline 这个姓名就应该能看出一点它的性质了...
【C语言内功心法】inline -- 提高函数的运行效率
记得早先少年时 大家诚诚恳恳 说一句 是一句 清早上火车站 长街黑暗无行人 卖豆浆的小店冒着热气 从前的日色变得慢 车,马,邮件都慢 一生只够爱一个人 从前的锁也好看 钥匙精美有样子 你锁了 人家就懂了 木心 – 《从前慢 》 一、inline 为何诞生? 在使用 C 语言进行编程时,如果有一些函数被频繁调用,就会不断地有函数跳转的操作,随之也会频繁带来入栈、出栈等操作,不经影响效率,还会大量占用栈等空间。 如何解决这个问题?我们可以选择用类似的代码段直接实现该函数功能,这样就不存在函数调用带来的各种问.
C语言 inline类型函数
读源程序时遇到如下代码: //*---------------------------------------------------------------------------- //* \fn AT91F_US_PutChar //* \brief Send a character,does not check if ready to send //*----...
C语言中把函数声明为inline是什么意思?
在 C 语言中,将函数声明为inline(内联)意味着编译器将该函数的代码直接插入到调用它的地方,而不是执行常规的函数调用。这种优化可以减少函数调用的开销,如栈帧分配和参数传递,从而提高程序运行效率,尤其是对小型、频繁调用的函数。inline。
inline函数_C语言中的Inline内联函数解析
C语言中的Inline内联函数解析在C语言中,为了解决一些频繁调用的小函数大量消耗栈空间或是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。栈空间就是指放置程序的局部数据也就是函数内数据的内存空间。那么在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足所造成的程序出错的问题:比如函数的死循环递归调用的最终结果就是导致栈内存空间枯竭,程序崩溃。下面我们来看一个例子#in...
C语言:inline函数代码示例
//inline函数 #include <stdio.h> inline int test(int a);//声明 int test(int a) { return (a % 2 == 0) ? 1 : 2; } int main(int argc, char const *argv[]) { int i = 0; for (int i = 0; i < 20; ++i) { printf(“i : %d ji ou:%d \n”,i,test(i)); } return 0; } //
C语言内联函数定义inline前加static原因
static inline
【转载】 c语言inline函数的使用
c语言inline函数的使用 转载自:http://blog.chinaunix.net/uid-21843265-id-3056446.html 大学在教科书上学习过inline函数,定义为inline函数之后,会省去函数调用的开销,直接嵌套汇编代码,取代函数调用,提高效率。工作后项目中也 很少用到inline来定义函数,近几天在研读google的google c++ style gui...
c语言 inline函数的总结
<br />1 inline只是个编译器建议,编译器不一定非得展开Inline函数。<br /> 例如:<br /> Inline函数地址引用<br /> inline在递归函数中使用<br /> <br />2 inline必须用于函数定义,对于函数声明,inline不起作用<br /> 例如:<br /> inline max(int,int); //没有Inline作用<br /> <br /> 只有 inl
C语言中的内联函数inline
本文链接:https://blog.csdn.net/lufeiop02/article/details/6526499在c中, 为了解决一些频繁调用的小函数大量消耗栈空间或是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。 栈空间就是指放置程式的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足所造成的程式出错的问题,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。 下面我们来看一个例子 #include <stdio.h
1306




被折叠的 条评论
为什么被折叠?



