内联函数

✍ dations ◷ 2025-12-10 10:46:45 #最优化

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

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

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

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

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

相关

  • 社会神经科学异常心理学 行为遗传学 生物心理学 心理药物学 认知心理学 比较心理学 跨文化心理学 文化心理学 差异心理学(英语:Differential psychology) 发展心理学 演化心理学 实验心理学
  • 哥特式艺术哥特式艺术,又译作哥德式艺术(法语:Art gothique),为一种源自法国的艺术风格,该风格始于12世纪的法国,盛行于13世纪,至14世纪末期,其风格逐渐大众化和自然化,形成国际哥特风格,直至15世
  • 足球超级联赛俄罗斯足球超级联赛(Чемпионат России по футболу),是俄罗斯足协协会组织的职业足球联赛,通常简称“俄超”。它是1991年苏联解体之后成立的顶级足球联
  • 雩桂片本文属于客家系列的一部分雩桂客语,或称客家语于桂片,是汉语族客家语的一个支系,主要分布在中国江西省西南部及湖南省东部地区。对于客家语的划分一般有两个版本,而此片在这两个
  • 班达楠榜班达楠榜是印尼楠榜省的首府,苏门答腊的第四大城市,以前是从爪哇进入苏门答腊的主要港口,印尼语意思是“漂浮的港口”。班达楠榜是由两个城市组成,丹戎加兰和直落勿洞,1983年合并
  • 王孙兰王孙兰(?-1643年),字畹仲,直隶无锡县(今江苏省无锡市)人。明朝政治人物,官至广东副使。崇祯四年(1631年)辛未科进士。累迁四川成都府知府。蜀王宗人虐待民众,民相聚,将焚内江王府第。王孙
  • 庙会 (日本)庙会是一种起源于宗教活动的风俗。日本在各种节日同中国一样也有庙会,但举办地点除了佛教寺院之外还有神道教的神社。不过随着明治维新五年后的1873年日本弃天保历改格里历,庆
  • 扬智科技扬智科技为集成电路设计公司,从事数字机顶盒、数字娱乐平台技术以及客厅、行动及车载的集成式消费性电子产品生产销售。扬智科技成立于1987年,创办人吴钦智。在台湾证券交易所
  • 社会智力社会智力,根据爱德华·桑代克的最初定义是一种理解并且管理男人女人,老人小孩一种正确处理人际关系的能力.相当于哈沃德·加德纳多元智能理论中的人际智力并且和情绪商数紧密
  • 佛拉明哥伦巴佛拉明哥伦巴(Flamenco Rumba),也叫做吉普赛伦巴或西班牙伦巴,是弗拉明戈音乐的一种舞蹈和伴奏音乐曲式。在19世纪,古巴伦巴(英语:Cuban Rumba)流传到了西班牙,因而产生了这种曲式。