内联函数

✍ dations ◷ 2025-11-28 15:50:40 #最优化

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

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

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

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

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

相关

  • 国民收入国民收入(或称国民生产毛额、本地居民收入)是反映整体经济活动的重要指标,因此常被使用于总体经济学的研究中,亦是国际投资者非常注视的国际统计项目。反映本地居民收入的两个主
  • CCL9CCL9(英语:Chemokine (C-C motif) ligand 9)是一个小型的细胞因子,属于CC趋化因子家族。它的别名有巨噬细胞炎性蛋白-1γ(英语:macrophage inflammatory protein-1 gamma,MIP-1γ),
  • 分形分形(英语:fractal,源自拉丁语:frāctus,有“零碎”、“破裂”之意),又称碎形、残形,通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后
  • 多米尼克·拉布多米尼克·伦尼·拉布(英语:Dominic Rennie Raab,1974年2月25日-)是一位英国政治人物,保守党党员、前事务律师、代表伊舍和沃尔顿选区的下议院议员,现任第一国务大臣、外交及联邦事
  • 补集在集合论和数学的其他分支中,存在补集的两种定义:相对补集和绝对补集。若 A {\displaystyle A} 和 B
  • 总统选举乔治·沃克·布什 共和党贝拉克·欧巴马 民主党2008年美国总统选举于2008年11月4日举行。总统是美国武装部队总司令、国家元首和政府首脑。副总统是总统的副手和联邦参议
  • 法姆克·扬森法姆克·伯默尔·詹森 (Famke Beumer Janssen,1964年11月5日-),是一位荷兰模特儿演员。1995年,法姆克和导演托德·威廉斯结婚。两人于2001年离婚。2008年的联合国反贪腐的会议中,扬
  • 卡加尔卡加尔(Kagal),是印度马哈拉施特拉邦Kolhapur县的一个城镇。总人口23775(2001年)。该地2001年总人口23775人,其中男性12113人,女性11662人;0—6岁人口2823人,其中男1551人,女1272人;识
  • 琉球香肠琉球香肠是台湾屏东县琉球乡的特产,以“去筋”为特色,因此口感好,容易嚼。琉球香肠通常不添加防腐剂,用猪小肠包裹。琉球香肠可以用于制作春卷和香肠炒饭。
  • 仓颉输入法仓颉输入法是一种常用的中文输入法,由有“中文电脑之父”美誉的朱邦复先生于1976年创制。初期只有繁体中文版本,原名“形意检字法”,用以解决电脑处理汉字的问题,包括汉字输入、