内联函数

✍ dations ◷ 2025-12-09 13:30:59 #最优化

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

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

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

此外,在一些语言中,内联函数与编译模型联系紧密:如在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为编译单元外部也可见。

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

相关

  • 蒙彼利埃蒙彼利埃(法语:Montpellier,法语发音:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Code2000","Genti
  • 农家农家,又被称为重农学派,是中国战国时期诸子百家之一。认为当时统治者应该像神农一样,和人民一起耕种,一起决策,鼓励农业发展,教导人民种植以促进农业技术的提高。因为他们认为农业
  • Clomifene可洛米分(Clomifene),为治疗女性无排卵性(英语:anovulation)不孕症,包含多囊卵巢综合症(PCOS)患者。使用后会导致生出双胞胎的几率增加。本品为口服药,一天服用一次。常见副作用包含骨
  • 小托柄鹅膏蕈伞平坦小托柄鹅膏(学名:Amanita farinosa,英语:Eastern American Floury Amanita)为生长于北美洲的鹅膏菌属毒菇。两篇近期的分子研究显示,小托柄鹅膏属于鹅膏菌属的一个次分类,
  • 准分子激光原位角膜磨镶术准分子激光原位角膜磨镶术(LASIK,Laser-Assisted in Situ Keratomileusis、层状角膜内层重塑术),是一种透过激光改变眼角膜的弧度,以改善视力的手术。就是用准分子激光通过对角膜
  • 萧逸萧逸(1935年6月4日-2018年11月19日),原名萧敬人,台湾新派武侠小说作家,山东菏泽人,生于北京。父亲萧之楚是国民党军人,抗战时随家人来到重庆,1949年赴台湾。1960年以处女作《铁雁霜翎
  • ATCvet代码 (QI)ATCvet代码QI(免疫产品)是兽用解剖学治疗学及化学分类系统的一个分类,这是由世界卫生组织药物统计方法整合中心(The WHO Collaborating Centre for Drug Statistics Methodology
  • 生活 (杂志)《生活》()是一本在美国发行的老牌周刊杂志,可说是在美国家喻户晓,地位与《时代》()相差不远。其前身是1883年在纽约市曼哈顿发行的幽默周刊,发行社就叫做生活出版社(Life Publishin
  • 楠属楠属(学名:),樟目樟科的一属。本属已知至少有50种,部分如下:
  • 蔡震蔡震,明朝驸马,操行谨慎。明宪宗成化五年(1466年)娶明英宗皇女淳安公主。明武宗正德五年(1510年)宦官刘瑾被弹劾下狱,刘瑾于是乱指大臣依附自己,廷臣无人敢审问他。蔡震厉声道:“我皇