内联函数

✍ dations ◷ 2025-12-08 04:18:15 #最优化

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

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

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

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

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

相关

  • Ohno, S.大野干(日语:大野乾/おおの すすむ Ōno Susumu,1928年2月1日-2000年1月13日)是一位出生于韩国,旅居于美国的日本遗传学家与演化生物学家,他提出了基因重复的概念,并研究X染色体上的
  • 860110 数学 120 信息科学与系统科学 130 力学 140 物理学 150 化学 160 天文学 170 地球科学 180 生物学210 农学 220 林学 230 畜牧、兽医科学 240 水产学310 
  • 天主的羔羊天主的羔羊(拉丁语:Agnus Dei;英语:Lamb of God;或译上帝的羔羊、神的羔羊),是基督教中耶稣的称号之一,出自福音书作者约翰所著《约翰福音》第1章第29节记载的施洗者约翰(天主教汉译:
  • 流寇流寇,又称流贼,是指流动的土匪、强盗,尤指明朝末年的流寇。流寇发展的历史相当久远,组成分子相当复杂,有逃丁、边兵、驿卒、矿徒、饥民等,一般流民即可发展成流寇,唐末的王仙芝、黄
  • 布伦特福德坐标:51°29′10″N 0°18′36″W / 51.486°N 0.310°W / 51.486; -0.310宾福特(英语:Brentford)是英国伦敦西部的一个市镇,是豪士罗区的成员,是宾特河与泰晤士河的合流地,于查宁
  • 菲律宾自由邦菲律宾自由邦(英语:Commonwealth of the Philippines)是一个已不存在的政治实体。成立于1935年。在此之前为美属菲律宾(1898年-1935年),曾是美国的一个未合并领土;直至1946年菲律宾
  • 仇恨团体仇恨团体(英语:Hate group)是针对某些人士的种族、民族、肤色、国籍、宗教、文化、语言、腔调、阶级、职业、外貌、性别、性取向、性别认同及性别气质等而憎恨、讨厌、敌视或者
  • 300<< 300301302303304305306307308309>><< 300310320330340350360370380390>><< 0100200300400500600700800900>> 300是299与301之间的自然数。371 = 33 + 73 + 13,所以是水仙
  • 安纳乍伦安纳乍伦(泰语:อำนาจเจริญ)位于泰国东北部的依善地区,是安纳乍伦府的府都。
  • 费德湖坐标:48°5′2″N 9°37′49″E / 48.08389°N 9.63028°E / 48.08389; 9.63028费德湖(德语:Federsee),是德国的湖泊,位于该国西南部,由巴登-符腾堡州负责管辖,处于巴特布豪,长2.3公