内联函数

✍ dations ◷ 2025-12-06 06:16:48 #最优化

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

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

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

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

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

相关

  • 真值表真值表是使用于逻辑中(特别是在连结逻辑代数、布尔函数和命题逻辑上)的一类数学用表,用来计算逻辑表示式在每种论证(即每种逻辑变数取值的组合)上的值。尤其是,真值表可以用来判断
  • 佩皮二世佩皮二世(Pepy II)(前2284年-前2184年),埃及第六王朝法老(公元前2278年—公元前2184年在位),据记载其在位长达94年,是世界历史上在位时间最长的君主。佩皮二世执政时期,埃及古王国时
  • 抽象形态抽象化(英语:Abstraction)是指以缩减一个概念或是一个现象的资讯含量来将其广义化(Generalization)的过程,主要是为了只保存和一特定目的有关的资讯。例如,将一个皮制的足球抽象化
  • 直肠阴道瘘直肠阴道瘘(英语:Rectovaginal fistula),是一类妇科疾病,指肠道与生殖道之间形成的异常通道。表现为阴道内排出粪便。瘘孔大者粪便经阴道排出,便稀时更为明显。瘘孔小,粪便干结成形
  • 娜芙蒂蒂娜芙蒂蒂(英语:Nefertiti;公元前1370年 -公元前 1330年)是埃及法老阿肯纳顿(又译“阿蒙霍特普四世”)的王后。娜芙蒂蒂与她的丈夫在统治期间进行宗教革命,推翻所有古埃及传统神明,规
  • 琥珀 (小说)《琥珀》(英语:Forever Amber),又译《虎魄》、《永远的琥珀》,凯斯琳·温索(英语:Kathleen Winsor)所著爱情小说,后于1947年被二十世纪福斯改编为电影《除却巫山不是云》。1644年,英国
  • 包岑格布哈德·冯·布吕歇尔包岑会战爆发于1813年5月19日至5月20日,于包岑展开战斗。反法同盟虽被拿破仑打败,却因为内伊的判断错误而顺利逃出法军包围圈,这场战役后,拿破仑的法军开
  • 杨-米尔斯存在性与质量间隙杨-米尔斯规范场论与质量间隙是理论物理中规范场论的一道基础问题,必须在数学上严格证明杨-米尔斯场论存在(即需符合构造性量子场论的标准),亦要证明它们有质量间隙,即模型所预测的
  • 缩头术干制首级(舒阿尔语:Tsantsa或Tzantza,英语:Shrunken head),亦称缩头术,是南美洲亚马逊盆地地区原住民的一种风俗,他们将在决斗或战争中砍下来的人头当作战利品进行一系列的特殊处理
  • 罗伯特·罗伊罗伯特·哈利·罗维(Robert Harry Lowie,1883年6月12日-1957年9月27日),奥匈帝国维也纳出生的美国人类学家,长于研究北美印地安人,对现代人类学理论的构建有颇多贡献。