内联函数

✍ dations ◷ 2025-12-11 08:50: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为编译单元外部也可见。

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

相关

  • 甲硫醇甲硫醇又被称为巯基甲烷、硫氢甲烷,分子式:CH3-SH,分子量:48.10,CAS号:74-93-1。常温常压下为无色气体,有烂白菜气味,因此常被加进煤气中。它是一个具有独特腐臭气味的无色气体。它
  • span class=nowrapNpClsub4/sub/span四氯化镎或氯化镎(IV),是一种无机化合物,易潮解,化学式NpCl4,有强放射性。四氯化镎可由二氧化镎或草酸镎(IV)在含有四氯化碳蒸汽的氯气流中加热至450℃(或500℃在四氯化碳中加热
  • 常用对数在数学中,常用对数是以10为底数的对数函数,其逆函数是以10作为基数的指数函数。它常被称呼为底为10的对数,或称为Briggsian 对数,以率先使用的英国数学家 Henry Briggs 命名,以及
  • 宣统宣统(满语:ᡤᡝᡥᡠᠩᡤᡝᠶᠣᠰᠣ,穆麟德:gehungge yoso,太清:gehungge yoso;蒙古语:.mw-parser-output .font-mong{font-family:"Menk Hawang Tig","Menk Qagan Tig","Menk Garqag
  • 重型增程机动战术卡车重型增程机动战术卡车 (Heavy Expanded Mobility Tactical Truck,简称HEMTT),是一种以美军为主要使用用户的八轮越野卡车系列,多数为10吨8x8货运卡车,也常被昵称"龙卡车"。HEMTT
  • 民族优越感自民族中心主义(英语:Ethnocentrism),是一种认为自己的文化优于其他文化的信仰。具有自民族中心主义的个人会判定其他族群与自身族群或文化有关连,尤其是语言、行为、习俗与宗教
  • 唐代宗代宗 (原定为唐代宗李豫(726年11月11日-779年6月10日),唐肃宗李亨的嫡长子。初名俶,小名冬郎,原封广平郡王,后改封广平王、楚王、成王,天可汗,唐朝第11代皇帝(不计武则天),在位17年(762年
  • 洛夫雷·卡利尼奇洛夫雷·卡利尼奇(克罗地亚语:Lovre Kalinić;1990年4月3日-)是一位克罗地亚足球运动员。在场上的位置是守门员。现时被英超球队阿士东维拉外借至法甲球队图卢兹。他也代表克罗地
  • 菲律宾大气地球物理和天文服务管理局菲律宾大气地球物理和天文服务管理局(他加禄语:Pangasiwaan ng Palingkurang Atmosperiko, Heopisikal at Astronomiko ng Pilipinas,英语:Philippine Atmospheric, Geophysical
  • 格伦戴尔格伦戴尔(Grendel),是8世纪英国史诗《贝武夫》中记述的妖怪。也是其中三个反派角色之一(剩下的是丈兰德尔的母亲和看守宝藏的火龙)。在故事中,他会因为不耐人们发出的噪音而攻击人