博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言中的static inline
阅读量:6474 次
发布时间:2019-06-23

本文共 959 字,大约阅读时间需要 3 分钟。

hot3.png

inline的作用仅仅是建议编译器做内联开展处理,而不是强制。

内联函数(inline)可以减少CPU的系统开销,并且程序的整体速度将加快,但当内联函数很大时,会有相反的作用,因此一般比较小的函数才使用内联函数。

通常,程序执行时,处理器从内存中读取代码执行。当程序中调用一个函数时,程序跳到存储器中保存函数的位置,开始读取代码执行,执行完后再返回。

为了提高速度,C语言定义了inline函数,告诉编译器把函数代码在编译时直接拷贝到程序中,这样就不用执行时另外读取函数代码。

static函数告诉编译器其他文件看不到这个函数,因此该函数只能在当前文件中被调用。static inline函数只能在当前文件中被调用,同时执行速度快,几个文件中都可以使用同样的函数名。

如下代码:

void main(){    int i;    for(i=0;i<100;i++)    {        myprint();    }}void myprint(){    printf("ok");}

上述代码中,在主函数中调用100次myprint函数,意味着这个函数要进栈100次,出栈100次,这样一来我们就打印一个小小的ok就把大量的时间花费在进栈和出栈之上了。我们可以把代码改为:

void main(){    int i;    for(i=0;i<100;i++)    {        myprint();    }}static inline void myprint(){    printf("ok");}此时相当于:void main(){    int i;    for(i=0;i<100;i++)    {        printf("ok");    }}

GCC会在其调用内联函数处将其汇编展开编译,而不为这个函数生成独立的汇编编码。以下几种情况除外:

1、函数的地址被使用的时候。如通过函数指针对函数进行了间接调用。这种情况下就不得不为static inline函数生成独立的汇编码,否则它没有自己的地址。

2、函数本身有递归调用自身的行为。

采用内联函数其实是以空间换取时间的做法。

转载于:https://my.oschina.net/935572630/blog/368004

你可能感兴趣的文章
mysql (ICP) 索引条件下推对比ORACLE进行说明
查看>>
【中亦安图】关于数据库文件损坏风险的提醒(3)
查看>>
UDEV规则参数详细解释使用
查看>>
软件项目管理“固化、简化、标准化”
查看>>
[20160325]参数resumable_timeout.txt
查看>>
Lucene.Net 2.3.1开发介绍 —— 三、索引(七)
查看>>
部署报表和 ReportViewer 控件 rdlc
查看>>
JavaScript的隐式转换
查看>>
使用librtmp进行H264与AAC直播
查看>>
如何学习微信公众平台的开发?
查看>>
Jquery 获取和设置元素属性值
查看>>
命令行利器Tmux
查看>>
云服务应用开发所面临的9大挑战
查看>>
各大互联网公司架构演进之路汇总
查看>>
PostgreSQL汉字转拼音
查看>>
了解ASP.NET MVC几种ActionResult的本质:FileResult
查看>>
一位资深程序员大牛给予Java初学者的学习路线建议
查看>>
753个大奖邀请各位新老博主入驻云栖,请技术人员广而告之
查看>>
恩信科技:市场为什么需要云计算ERP
查看>>
《Linux From Scratch》第三部分:构建LFS系统 第六章:安装基本的系统软件- 6.1. 简介...
查看>>