内联函数

✍ dations ◷ 2025-08-17 06:34:51 #最优化

在计算机科学中,内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展);也就是说建议编译器将指定的函数体插入并取代每一处调用该函数的地方(上下文),从而节省了每次调用函数带来的额外时间开支。但在选择使用内联函数时,必须在程序占用空间和程序执行效率之间进行权衡,因为过多的比较复杂的函数进行内联扩展将带来很大的存储资源开支。另外还需要特别注意的是对递归函数的内联扩展可能引起部分编译器的无穷编译。

内联扩展是一种特别的用于消除调用函数时所造成的固有的时间消耗方法。一般用于能够快速执行的函数,因为在这种情况下函数调用的时间消耗显得更为突出。这种方法对于很小的函数也有空间上的益处,并且它也使得一些其他的优化成为可能。

没有了内联函式,程式员难以控制哪些函数内联哪些不内联;由编译器自行决定是否内联。加上这种控制维度准许特定于应用的知识,诸如执行函式的频繁程度,被利用于选择哪些函数要内联。

此外,在一些语言中,内联函数与编译模型联系紧密:如在C++中,有必要在每个使用它的模块中定义一个内联函数;与之相对应的,普通函数必须定义在单个模块中。这使得模块编译独立于其他的模块。

通常,在C语言中,内联展开的功能由带参宏(Macros)在源码级实现。内联提供了几个更好的方法:

C++,C99. C11和GNU C都支持内联函数,然而1989 ANSI C,这个最被广泛使用的C标准却不支持。在Ada中,关键字“pragma”可以用来声明内联。其他的大部分编程语言,包括Java和函数式语言,不支持内联函数,但他们的编译器常常进行强制性的内联扩展。不同的编译器在内联扩展上有处理不同复杂程度函数的能力。主流的C++编译器如Visual C++和GCC提供了一个选项来自动内联任何一个合适的函数,即使它们没有被声明为内联函数。

对于C++,inlineextern inline同义:内联函数在各个编译单元都可能会生成一份,要求各处定义完全一致。内联函数在C++中的写法如下:

inline int max (int a, int b){    if (a > b)        return a;    else        return b;}
a = max (x, y); 

对于C99,inline为编译单元内部可见,extern inline为编译单元外部也可见。

除了通常使用内联扩展可能带来的问题,作为一种编程语言特性的内联函数也可能并没有看起来那么有效,原因如下:

相关

  • 共球藻纲见内文共球藻纲(学名:Trebouxiophyceae)是藻类中绿藻门一纲。其在绿藻中的分类地位目前还不清楚,需要更多较高层级的遗传学研究数据来确定。本纲包括以下五个目:若不牵涉系统分类
  • 美国物理学会美国物理学会(英语:American Physical Society,APS)成立于1899年,是世界最大的物理学组织,发表十余种科学期刊,每年举办20多项科学会议,约有四万多会员。该学会亦是美国物理协会成员
  • 坦索罗辛坦索罗辛(Tamsulosin),药品名称是Flomax等,可以治疗有症状的良性前列腺肥大症(BPH)、慢性前列腺炎/慢性骨盆疼痛综合症,也可以帮助肾结石排出,目前的证据显示对较大的肾结石效果较好
  • 扮装皇后变装皇后是一个外来词,来自英文中的“Drag Queen”这个表达。异装王后,或扮装王后,易装王后,或称为异装者,指透过穿女性服装来扮演女性的男性。异装有很多种表现形式,有些是想效法
  • 德热纳皮埃尔-吉勒·德热纳(法语:Pierre-Gilles de Gennes,1932年10月24日-2007年5月18日),法国物理学家,1991年获诺贝尔物理学奖。2007年5月18日于奥赛逝世。德热纳1932年生于巴黎,1961年
  • 马蒂厄·克雷库马蒂厄·克雷库(法语:Mathieu Kérékou,1933年9月2日-2015年10月14日)为非洲国家贝宁军事强人。他于塞内加尔接受军事训练后,于1972年10月26日,以少校身份发动武装政变,并获得贝宁
  • 星际火狐系列星际火狐(日语:スターフォックス;英语:Star Fox)是由任天堂情报开发本部、Rare和南梦宫等工作室开发并由任天堂公司发行的STG(飞行射击类)游戏系列。初代诞生于1993年。系列共有五
  • 佐伊·康斯坦托普洛斯佐伊·康斯坦托普洛斯(希腊语:Ζωή Κωνσταντοπούλου;1976年12月-)是希腊的一个人权律师和政治家。她曾任希腊议会议长,于2015年2月6日取得300议席中的236议席而
  • 本部朝基本部朝基(琉球语:本部 朝基/ムトゥブ チョーチ  ?;日语:本部 朝基/もとぶ ちょうき ;1870年5月5日-1944年4月15日),是活跃于琉球国第二尚氏王朝末期至日本冲绳县时期的空手道(唐手)大
  • 张琳芃张琳芃(1989年5月9日-),出生于山东济南,回族,中国足球运动员,司职后卫,现时效力于中超球队广州恒大淘宝。习惯脚是右脚。张琳芃小学一年级时曾练过田径。后来张琳芃爱上了足球,成了济