内联函数

✍ dations ◷ 2025-11-30 11:53:28 #最优化

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

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

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

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

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

相关

  • 摩西·门德尔松摩西·门德尔松(德语:Moses Mendelssohn, 1729年9月6日-1786年1月4日)是一位德国犹太哲学家,倡导哈斯卡拉运动(18-19世纪的犹太启蒙运动)。尽管实际上他本人践行犹太教正统派,他通常
  • 拳击拳击(英语:boxing;日语:拳闘、ボクシング),别名西洋拳,是一项两位选手使用拳头并佩戴拳击手套进行攻击与防御的体育运动,具有悠久的历史。拳击和射箭都是人类古时的生存技巧,原始人用
  • 相态列表相态列表是关于各种常见(固态,液态,气态,等离子态)和不常见的相态(物质在一定温度压强下所处的相对稳定的状态)的列表,列表是根据能量密度由低到高排列。相态是指物质出现不同的相,也
  • 腹腔动脉腹腔动脉(arteria coeliaca),又称腹腔动脉干(Truncus coeliacus),源自于腹主动脉(英语:abdominal aorta),水平长度约1.25 cm。在人体中,腹腔动脉会于第12节胸椎处由腹主动脉分支,为腹主
  • 卡里莫夫伊斯兰·阿卜杜加尼耶维奇·卡里莫夫(乌兹别克斯坦语:Islom Abdugʻaniyevich Karimov,Ислом Абдуғаниевич Каримов;俄语:Ислам Абдугани
  • 灾害灾害,又称为灾难、灾祸、灾厄、灾患、祸患、浩劫,是对能够给人类和人类赖以生存的环境造成破坏性影响的事物总称。灾害不表示程度,通常指局部,可以扩张和发展,演变成灾难。如蝗虫
  • 山雀山雀科(学名Paridae),是鸟纲雀形目中的一个科。原来该科下的鸟类大部分位于山雀属下,2013年拆分成对个属。按鸟类DNA分类系统,山雀科还包括攀雀科生物。
  • font color=#ffffff青海/font青海省高等学校列表为中国大陆高等学校列表中的青海省部分。截至2017年5月31日,青海共有3所公立本科高校、1所民办本科高校、8所专科高校、2所成人高校。
  • 斯坦尼斯公众服务中心斯坦尼斯公众服务中心(the Stennis center for Public Service)是美国国会于1988年创建的联邦立法机构,旨在提高美国的公众服务领导能力。该机构总部位于密西西比州斯塔克韦
  • MHC1类分子MHC1类分子(MHC class I),为两种MHC(主要组织相容性复合物)分子之一,能够与长8-13氨基酸残基的内源性肽段结合,并将之呈递到细胞表面。MHC1类分子由一条较长的重链(α链)和一条较短的