内联函数

✍ dations ◷ 2025-12-03 01:51:36 #最优化

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

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

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

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

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

相关

  • 莱曼·斯皮策小莱曼·史庄·斯皮策(英语:Lyman Strong Spitzer, Jr.,1914年6月26日-1997年3月31日),美国理论物理学家、天文学家。他是太空望远镜概念的提出者,NASA以他的名字命名斯皮策太空望
  • 慕尼黑工业大学慕尼黑工业大学(英语:Technical University Munich;德语:Technische Universität München)是德国著名技术类大学(工业大学)。历史上校友中名人辈出。
  • 赤德松赞赤德松赞(藏语:.mw-parser-output .uchen{font-family:"Qomolangma-Dunhuang","Qomolangma-Uchen Sarchen","Qomolangma-Uchen Sarchung","Qomolangma-Uchen Suring","Qomolan
  • 奇兰奇兰县(英语:Chelan County;发音: /ʃəˈlæn/)是位于美国华盛顿州中部的一个县,东界哥伦比亚河。面积7,753平方公里。根据美国2010年人口普查,共有人口72,453人。该县是韦纳奇-东
  • 刘芳 (音乐家)刘芳(1974年-)是一位加拿大华人音乐家。1974年出生于昆明,擅琵琶、古筝,得到媒体、专家和听众给于极高的赞誉。刘芳的多场音乐会被加拿大、荷兰、英国、法国、德国、西班牙等国国
  • 伯尔尼山伯尔尼山(德语:Berner Alpen;法语:Alpes bernoises;意大利语:Alpi bernesi;英语:Bernese Alps)是瑞士的山脉,是西阿尔卑斯山脉的一部分,最高点海拔高度4,274米,由石灰岩组成的山体在白垩
  • 哲合忍耶哲合忍耶派,即“高赞派”,是中国伊斯兰教苏菲主义中传播最广,信仰者最多的一支门宦(苏菲派别)。起源于中亚的纳克什班迪教团,公元18世纪由始传者马明心引入中国。新教进入中国后与
  • 尼尔·阿伯克龙比尼尔·阿伯克龙比(英语:Neil Abercrombie,1938年6月26日-),美国政治人物,民主党人。2010年12月至2014年12月担任夏威夷州州长,为该州第7任州长。尼尔·阿伯克龙比生于纽约州布法罗市
  • 危险少年3《危险少年3》(日语:あぶない少年III/あぶないしょうねんスリー )是1988年10月12日到1989年3月29日期间在日本东京电视网播出,由东京电视台与亨米工作室(日语:オフィス・ヘンミ)联
  • 瓜生外吉瓜生外吉(日语:瓜生外吉/うりゅう/うりう そときち  ?),大日本帝国海军将领,1857年1月27日(安政4年1月2日)出生,1937年(昭和12年)11月11日逝世。服役时间历明治、大正、昭和三朝,日俄