内联函数

✍ dations ◷ 2025-12-05 16:42:39 #最优化

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

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

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

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

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

相关

  • 国际全球化学品统一分类和标签制度(Globally Harmonized System of Classification and Labeling of Chemicals,缩写为GHS)也称为“化学品分类及标记全球协调制度”,是一套由联合国
  • 逻辑逻辑(古希腊语:λογική;德语:Logik;法语:logique;英语:logic;意大利语、西班牙语、葡萄牙语: logica),又称理则、论理、推理、推论,是对有效推论的哲学研究。逻辑被使用在大部分的
  • 微波微波(英语:Microwave,德语:Mikrowellen)是指波长介于红外线和无线电波之间的电磁波。微波的频率范围大约在 300MHz至300GHz之间。所对应的波长为1米至1mm之间。微波频率比无线电
  • 石墨石墨(Graphite),又称黑铅(Black Lead),是碳的一种同素异形体(碳的其他同素异形体有很多,为人熟悉的例如钻石)。作为最软的矿物之一,石墨不透明且触感油腻,颜色由铁黑到钢铁灰不等,形状可
  • 超低穿透空气过滤网超低穿透空气过滤网(英语:Ultra Low Penetration Air Filter,缩写:ULPA),主要是用来去除0.1µm以上之微粒,过滤效果约为DOP 99.995%以上,过滤网材质为特殊玻璃纸。测试这些过滤网的
  • 市区市区(英语:urban area, urban agglomeration),又称城区,是指和周边地区相较之下,有着人口密度较高、人类活动特征较发达的区域。在行政划分上,市区可能是市、镇,或是由多个行政区域
  • 铜的同位素铜(原子质量单位:63.546(3))共有36个同位素,其中有2个是稳定的。备注:画上#号的数据代表没有经过实验的证明,只是理论推测而已,而用括号括起来的代表数据不确定性。
  • 犹太教改革派犹太教改革派,或称犹太教自由派、犹太教进步派,为犹太教在众多现代派别中,自认为是最进步的一派。这一派认为信仰须与时并进,并经由自身经验与理论而得,而非从律法书而来。他们重
  • 第一作者在学术出版(英语:academic publishing)领域,第一作者或首席作者指的是出版物(例如:学术出版或审计等)的作者栏中排序在第一位的作者。学术署名的标准在很多学术领域都不尽相同。
  • 鳌峰山市镇公园鳌峰山市镇公园位于台中市清水区,又称为鳌峰山公园、清水公园,是一座地貌丰富的自然景观公园,也是台中市海线地区民众休闲游憩的空间。2014年6月,鳌峰山游憩区观景平台完工启用,