内联函数

✍ dations ◷ 2025-11-29 15:38:11 #最优化

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

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

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

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

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

相关

  • 太阳光太阳光,广义的定义是来自太阳所有频谱的电磁辐射。在地球,阳光显而易见是当太阳在地平线之上,经过地球大气层过滤照射到地球表面的太阳辐射,则称为日光。当太阳辐射没有被云遮蔽
  • 威廉三世及二世奥兰治的威廉三世(荷兰语:Willem III van Oranje;1650年11月14日-1702年3月8日),出生即继位为奥兰治亲王,1672年7月任荷兰省、泽兰省执政,1674年4月26日任乌德勒支省、海尔德兰省及
  • 罗斯福号罗斯福号航空母舰可能意指下列两艘以不同的罗斯福总统所命名之美国航空母舰:
  • 基督教宗派基督教的教派以天主教、东正教及新教为三大系统,涵盖众多古老与新兴的教派,其中较晚形成的新教是教派最多和不统一并各自发展的系统。此处对“教派”或“宗派”的定义是指在相
  • 国际癌症研究机构二B类致癌物2B类致癌物(英语:Group 2B carcinogens),为国际癌症研究机构(International Agency for Research on Cancer,IARC)对致癌物质的分类,此类物质(或其混合物)可能对人类致癌。现有236类物
  • 威廉·康格里夫爵士第二代准男爵,威廉·康格里夫爵士KCH FRS(Sir William Congreve, 2nd Baronet)是一位英国发明家暨火箭炮先驱,因其开发和部署了康格里夫火箭(Congreve rocket)而闻名,他也是一名保
  • 北港 (佛罗里达州)北港(英语:North Port),是美国佛罗里达州下属的一座城市。建立于1959年。面积约 为195.7平方公里(约合75.6平方英里)。根据2010年美国人口普查,该市有人口57,357人。论人口在本州排
  • 理查·拉萨鲁斯理查·拉萨鲁斯(Richard Lazarus), 美国应激理论的现代代表人物之一,1989年获美国心理学会颁发的杰出科学贡献奖。对情绪和适应作了大量的研究。关于应激反应的对付过程,他提出了
  • 狂犬病 (2019年电影)《狂犬病》(英语:,台湾译《尸控疗法》)是一部于2019年上映的加拿大科幻恐怖片,由索斯卡姊妹自编自导自演,其他主演包括劳拉·范德沃特、葛瑞格·布莱克、麦肯锡·格雷、汉内·琪塔
  • 鹤科鹤科(学名:Gruidae)在动物分类学上是鸟纲鹤形目的一个科,包括四个属及十五个物种。鹤是鸟类中体型较大(全长 80 至 175 公分)也较著名的家族,大多分布于欧亚大陆与非洲大陆,少数几种