内联函数

✍ dations ◷ 2025-07-27 17:58:19 #最优化

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

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

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

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

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

相关

  • 陶瓷工程陶瓷工程是使用无机非金属材料制造物体的科学技术。陶瓷工程的研究范围包括包括对原材料的提纯、对需要的化学成分的研究和生产以及对产物的结构、成分和性质的研究。陶瓷材
  • 艾奥瓦州立大学艾奥瓦州立大学(Iowa State University,又译为艾奥瓦州立大学,旧译依阿华州立大学)是一所位于美国艾奥瓦州艾姆斯的公立大学,全称为艾奥瓦州立科学与技术大学(Iowa State Universi
  • 玉嫔玉嫔(1843年8月14日-1863年1月5日),星恳达尔汉系叶赫那拉氏,出自褚孔格第三子尼雅尼雅喀一脉。满洲正白旗人。员外郎桂祥之女,全志的孙女,兵部尚书那清安之曾孙女。清文宗璹嫔为她
  • 体重降低体重下降(Weight loss)在医学、健康或是体适能领域中,是指人体体重的下降,可能是因为体液的减少、体脂肪或脂肪组织的减少,也有可能是净体重(lean mass,无脂肪体重,是指骨骼矿物质、
  • 蒙哥马利·伯恩斯查尔斯·蒙哥马利·伯恩斯(Charles Montgomery Burns),通常也叫做伯恩斯先生或“蒙蒂”·伯恩斯,台湾翻译为郭董(影射台湾真实人物),是美国动画情景喜剧《辛普森一家》中一位虚构的
  • 冂部冂部,就汉字索引来说,是为部首之一,康熙字典214个部首中的第十三个(两划的则为第七个)。冂部归于二划部首,通常是从上方或下方为部,且无其他部首可用者将部首归为冂部。坰的本字,即
  • 非宗派教会非宗派教会(英语:Nondenominational Church),也叫独立教会(英语:Independent Church),是基督教教会组织的一种。 在教会组织体制上与传统教会、宗派、神学、信条等没有共融或隶属关
  • 1988年亚美尼亚大地震亚美尼亚大地震是1988年12月7日发生在亚美尼亚北部斯皮塔克附近的毁灭性大地震。地震发生在当地时间上午11:41(UTC07:41),震级为里氏6.8级。地震造成了亚美尼亚第二大城市列宁
  • 长坂坡之战长坂坡之战发生于中国东汉末年,曹操军在荆州当阳附近的长坂坡追击刘备军。赤壁之战之前哨战。汉献帝建安七年(202年),夏侯惇率领曹军与刘备军战于博望坡,之后两军撤退。在白狼山
  • 五纬五纬,亦称五星,是中国将太白、岁星、辰星、荧惑、填星这五颗行星合起来的称呼,它们与五行分别对应金、木、水、火、土。五星与日、月合称七政。在中国古代星占学上,五星与五常、