内联函数

✍ dations ◷ 2025-12-06 14:36:26 #最优化

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

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

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

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

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

相关

  • 苏门达腊猩猩 (iP. abelii)苏门达腊猩猩(学名:Pongo abelii)是更为稀有且体型较小的红猩猩,生活在印度尼西亚的苏门达腊,是当地的特有种。雄性苏门达腊猩猩可以长到4.6呎高及200磅重;雌性的体型更小,平均只有
  • 环丙烯环丙烯是一种有机化合物,分子式为C3H4。这种三个碳的化合物是最简单的环烯烃。由于环上具有很大的张力,环丙烯难以制备且非常活泼。这种无色的气体常用于化学键和反应性的基础
  • 肠杆菌属等肠杆菌属(学名:Enterobacter)是一种革兰氏阴性菌、兼性厌氧生物及呈棒状的细菌,属于肠杆菌目肠杆菌科。这个属下的七个种都是病原及使宿主免疫受损的机会性感染的细菌。泌尿道
  • 父母管理训练父母管理训练(英文:Parent Training in Behavior Therapy 、Behavior Management Training for Parents, Parent Behavior Therapy、 Behavioral Parent Training、或 Parent
  • 肯纳肯纳(Kenner, Louisiana),美国路易斯安那州杰佛逊县一城市,位于新奥尔良市近郊。面积39.4平方公里,2000年美国人口普查为70,517人口。该市于1855年建立。
  • 迷你裙迷你裙是一种长度只及膝盖以上的短裙,迷你裙的其中一个定义是站立时,食指和无名指可以触及裙子的底边。但普遍的称呼中,通常也把膝盖以上长度的短裙为迷你裙,尽管他们比迷你裙长
  • 科尔苏斯皮纳科尔苏斯皮纳(加泰罗尼亚语:Collsuspina),是西班牙加泰罗尼亚巴塞罗那省的一个市镇。总面积15平方公里,总人口268人(2001年),人口密度18人/平方公里。
  • 午言媒体午言媒体是新加坡一家多元化媒体公司,主要业务包括艺人管理、节目制作、活动策划等。公司成立于2011年7月,总裁为Jacki Ng。 许振荣(英语:Dasmond Koh)于2014年入股,随后在2015年
  • 米兰·彼得热拉米兰·彼得热拉(Milan Petržela)是捷克的一位足球运动员。他现在效力于德国足球甲级联赛球队奥格斯堡足球俱乐部。他也代表捷克国家足球队参赛。
  • 珂罗版珂罗版或作珂㼈版(英语:collotype),是一种基于重铬酸盐的照相平版印刷工艺,由法国摄影师柏德范于1856年发明。共分为照相、修版、晒版、印刷等四道制作工序。其中“珂罗(㼈)”是对