内联函数

✍ dations ◷ 2025-12-02 03:37:12 #最优化

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

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

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

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

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

相关

  • 苏德战争轴心国 纳粹德国 意大利王国(至1943年) 匈牙利王国 罗马尼亚王国(至1944年) 保加里亚第三帝国(至1944年)同盟国 苏联 波兰(英语:Polish Armed Forces in the East) 南斯拉夫(自1
  • 社会保守主义社会保守主义相信社会建立在一个脆弱的关系网络之上,这种关系网络需要通过责任、传统价值观和既定制度来维护。这可能包括道德问题。社会保守主义通常对社会变迁持怀疑态度,并
  • 国际非专利药品名称国际非专利药品名称,简称INN(International Nonproprietary Name for Pharmaceutical Substances),是世界卫生组织给每种药品的一个官方的非专利性名称。INN是新药开发者在新药
  • 不列颠战役不列颠战役(Battle of Britain),又名英伦空战,是第二次世界大战期间纳粹德国对英国发动的大规模空战,而这次战争亦是第二次世界大战中规模最大的空战,除了英、德两国之外包括同属
  • 加兹温省加兹温省(波斯语:استان قزوین)是伊朗三十一个省份之一。面积15,491平方公里,在所有省份中排行第28。人口约1,166,861(2005年数据);首府位于加兹温市。加兹温省位于伊朗
  • 人名反应当一个化学反应(尤其是有机化学反应)被某人所发现或加以推广,并以他/她的名字来命名作为纪念,这样命名的化学反应称为人名反应(Name reaction)或命名反应。著名的人名反应包括维蒂
  • 霍华德庄园《霍华德庄园》(英语:)是一套1992年的英国剧情片,由詹姆斯·艾佛利执导,安东尼·霍普金斯、埃玛·汤普森和海伦娜·宝咸·卡达等人主演。电影改编自E·M·福克斯特1910年的同名小
  • 吴朝吴朝(越南语:Nhà Ngô/.mw-parser-output .han-nom{font-family:"Nom Na Tong","Han-Nom Gothic","Han-Nom Ming","HAN NOM A","HAN NOM B","Ming-Lt-HKSCS-UNI-H","Ming-Lt-H
  • 共识决策法共识决策法是指一种决策过程,不仅追求参与者的多数的同意,而且还解决和减轻少数人的反对以达成最多同意的决策。共识通常被定义为以下含义:共识决策法因此主要关注这个过程。该
  • 特罗瓦特峰坐标:46°24′21″N 9°58′13″E / 46.40573°N 9.97039°E / 46.40573; 9.97039特罗瓦特峰(Piz Trovat),是瑞士的山峰,位于该国东部,由格劳宾登州负责管辖,属于贝尔尼纳山脉的一