内联函数

✍ dations ◷ 2025-12-11 02:14:35 #最优化

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

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

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

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

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

相关

  • 角分符号؋ ​₳ ​ ฿ ​₿ ​ ₵ ​¢ ​₡ ​₢(英语:Brazilian cruzeiro) ​ $ ​₫ ​₯ ​֏ ​ ₠ ​€ ​ ƒ(英语:Florin sign) ​₣ ​ ₲ ​ ₴(英语:Hryvnia sign) ​ ₭ ​ ₺
  • 姚建铨姚建铨(1939年1月29日-),江苏无锡人,生于上海,中国激光与光电子科学家。1957年由苏州中学考入天津大学精仪系,1965年研究生毕业。现任天津大学教授。1997年当选为中国科学院院士。
  • 约400种柳,或柳树,是对柳属(Salix)植物的统称,其下共有四百多种物种,常见于北半球的寒带及温带。柳属植物要进行杂交非常容易,不论是天然或是人工的混种都很普遍。Salix × sepulcr
  • span style=color: white;ESCB/span本文是 欧洲联盟的政治与政府 系列条目之一欧洲中央银行体系(法语:Le Système européen de banques centrales,SEBC;德语:Das Europäische System der Zentralbanken, ESZB;英
  • 人中黄粪便,又称屎、大便、便便,部分地区俗称㞎㞎,是动物经肛门或者泄殖腔从消化系统中排出的废弃物。食物被生物的消化系统吸收部分养分及水分后,剩余未被利用的残渣,则是属于排遗物的
  • 世界各国和地区面积列表索引 国防预算 石油储量 军事(武装部队) 死刑 国债 生育率 最高点 官方语言 地理 政体 面积 代码 陆地面积 人口 人口密度 国内生产总值 国徽 国旗 国歌 国家格言 首都 城市
  • 球面三角学球面三角学是球面几何学的一部分,主要在处理、发现和解释多边形 (特别是三角形) 在球面上的角与边的联系和关联。在天文学上的重要性是用于计算天体轨道和地球表面与太空航行
  • 乔伊·保罗·吉尔福特乔伊·保罗·吉尔福特(Joy Paul Guilford,1897年3月7日,内布拉斯加州马奎特 – 1987年11月26日,洛杉矶)是一位美国心理学家,以对人类智力的心理测量学研究而著称。他毕业于内布拉
  • 欧内斯特·布洛赫欧内斯特·布洛赫(英语:Ernest Bloch,1880年7月24日-1959年7月15日),犹太血统的瑞士裔美国作曲家,指挥家。布洛赫1880年生于日内瓦的一个犹太家庭。早年在布鲁塞尔音乐学院从伊萨伊
  • 玛占玛占(1612年8月9日(万历四十年 / 壬子年七月十三)-1638年12月29日(崇德三年十一月二十五)),满洲爱新觉罗氏。清太祖努尔哈赤孙、礼烈亲王代善第六子,母侧福晋哈达纳喇氏。天聪九年(163