内联函数

✍ dations ◷ 2025-11-29 05:03:57 #最优化

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

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

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

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

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

相关

  • 图尔奈图尔奈(或译土奈,法语:Tournai,法语发音:.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Code2000","Gen
  • 平行演化平行演化是指两个或多个相关但不同种系的生物,因生活在相似环境而发育了相似的形状。
  • 量子物理量子力学(英语:quantum mechanics)是物理学的分支学科。它主要描写微观的事物,与相对论一起被认为是现代物理学的两大基本支柱,许多物理学理论和科学,如原子物理学、固体物理学、
  • 匡源匡源(1815年-1881年),字本如,号鹤泉,山东胶州人。清朝大臣。道光二十年(1840年)进士,历任皇子奕
  • 北方民族大学北方民族大学是中央部属高校,国家民族事务委员会直属、教育部和宁夏回族自治区三方共建的高等学校,中国唯一建立在少数民族自治区的部属综合性民族高校。位于中国美丽的“塞上
  • 稗牙谷《稷田谷》(韩语:피아골,英语:Piagol),又译为《稗牙谷》,为1955年韩国战争电影,于1955年9月23日上映,片长106分钟,由韩国导演李康天(朝鲜语:이강천)执导,金炳沂监制,白狐电影制作公司出品、
  • 上议院主席最高元首后东姑阿兹纱阿蜜娜(英语:Tunku Azizah Aminah Maimunah)副最高元首苏丹纳兹林沙(马来语:Sultan Nazrin Muizuddin Shah ibni Sultan Azlan Muhibbuddin Shah)副首相(不设
  • 德国联邦国防军空军德国联邦国防军空军(德语:Luftwaffe)是指德意志联邦共和国的空军部队。德国在第一次世界大战中战败,按照1919年《凡尔赛条约》,德国空军被解散。但在魏玛共和国后期,德国逐步突破
  • 李秉中李秉中,中华人民共和国政治人物。担任王崇伦式的生产革新者、重庆空气压缩机厂青年刨工。1954年,当选第一届全国人民代表大会代表。
  • 辛标信辛标信(缅甸语:ဆင်ဖြူရှင်,缅甸语委转写:;1736年9月12日-1776年6月10日),中国古籍称其为孟驳、懵驳,是缅甸贡榜王朝的第三代国王,1763年至1776年在位。他是贡榜王朝建立者雍