内联函数

✍ dations ◷ 2025-11-30 03:15:21 #最优化

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

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

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

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

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

相关

  • 贝尔纳多·奥赛贝尔纳多·阿尔韦托·奥赛(Bernardo Alberto Houssay,1887年4月10日-1971年9月21日),阿根廷医生。他由于发现脑下垂体前叶激素在糖代谢中的部分作用而获得了1947年诺贝尔生理学或
  • 新西兰君主新西兰君主是新西兰王国的君主和国家元首,也是新西兰西敏制议会民主制度的核心。现任君主是伊丽莎白二世,由1952年2月6日统治至今。新西兰君主除了统治新西兰外,也是另外15个英
  • 姚官庄姚官庄遗址,为中国新石器时代著名遗址之一,位于山东省潍坊市西南方的姚官庄村,为山东龙山文化遗址。1960年山东省文物局配合水库工程进行发掘,揭露面积1700余平方米,文化遗存主要
  • WalkmanWalkman,是日本索尼公司(Sony)在1979年所推出的一个随身听品牌,而中文的随身听名称即是由“Walkman”转变而来。1979年3月,在井深大的要求下,音响部门以记者用的小型录音机“新闻
  • 中微子通信中微子通信是一种用中微子作为信息载体的通信方式。 用高能质子加速器来加速质子,以获得几千亿电子伏特的高能的电子束。然后用它来轰击靶子,从而产生不稳定的粒子。这些粒子
  • 约瑟夫-尼古拉斯·德利尔约瑟夫-尼古拉斯·德利尔(法语:Joseph-Nicolas Delisle,1688年4月4日-1768年9月11日)是一位法国天文学家。1714年进入法国科学院,1718年进入法兰西公学院。曾于1725年受俄国沙皇彼
  • 英国广播公司美国台英国广播公司美国台(BBC America)是一个美国电视频道,由英国广播公司商业分支拥有和营运,可通过有线电视或卫星电视收看。
  • 上方上方(かみがた・かみかた)是江户时代称呼大坂、京都为中心的畿内的名称。广义的也指畿内为中心的近畿地方一带。天皇居住的首都为“上”,特别是江户幕府将三河国以西的五畿内(大
  • 菩提道灯论龙树、圣天、无著、 世亲、陈那、法称、 释迦光、功德光 【其他】─ 《入中论》 《释量论》 《俱舍论》 《现观庄严论》 《律经》【其他】─ 《菩提道灯论》(梵语:Bodhipatha
  • 马骡马骡,骡子的一种。由母马与公驴交配所产生的后代,并不具有生殖能力。具有杂种优势,体型若马。身体较大,耳朵较小,尾部的毛蓬松。力大且寿命长于马或驴。