内联函数

✍ dations ◷ 2025-06-08 12:45:58 #最优化

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

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

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

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

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

相关

  • 神经成像神经成像(英语:Neuroimaging)泛指能够直接或间接对神经系统(主要是脑)的功能,结构,和药理学特性进行成像的技术。神经成像是医学,神经科学,和心理学较新的一个领域。根据成像的模式,神
  • 英国通讯英国的通讯业最初由国营的英国皇家邮政电讯分部垄断,另外收音机和电视广播则由英国广播公司和受独立广播管理局(IBA)监管的电视台专营──两所机构直接拥有和控制全英国的广播,
  • 试管肉培植肉,亦作人造肉、人工肉、试管肉、清洁肉或合成肉,指任何并非从动物身上取得的肉类,而是透过生物工程培养动物的肌肉细胞而成。原理是先从动物体内抽取干细胞,再放进试管或培
  • NEMA美国电气制造商协会(National Electrical Manufacturers Association),简称NEMA,是美国电气设备及医学影像制造商组成的协会,在1926年创立,总部在华盛顿附近的维吉尼亚州罗斯林(英
  • 缓和镇静缓和镇静(palliative sedation),也称临终镇静(terminal sedation),在医学上指通过持续皮下注射或静脉滴注镇静剂来减轻临终病人痛苦的方法。临终关怀中对有痛苦症状的临终病人,应
  • 韩国综合股价指数韩国综合股价指数(韩语:코스피지수;英语:Korea Composite Stock Price Index;简称KOSPI)是韩国交易所的股票指数。指数由所有在交易所内交易的股票价格来计算,并以1980年1月4日作为
  • 台州.mw-parser-output ruby.zy{text-align:justify;text-justify:none}.mw-parser-output ruby.zy>rp{user-select:none}.mw-parser-output ruby.zy>rt{font-feature-settings:
  • 王小川王小川(1978年-),四川成都人,搜狗公司首席执行官。1990年,以成都第一名的成绩考入成都七中数学实验班。1996年,获得国际信息学奥林匹克竞赛金牌,从成都七中毕业保送清华大学。2000年
  • 鲁商集团山东省商业集团有限公司,简称鲁商集团,是一家总部位于济南市的大型国有企业。1992年底,原山东省商业厅进行改组,成立山东省商业集团。目前山东省商业集团业务涵盖零售业、制造业
  • 伊戈尔·马托维奇伊戈尔·马托维奇(斯洛伐克语:,1973年5月11日-),现任斯洛伐克总理。生于特尔纳瓦,大学就读于布拉迪斯拉发夸美纽斯大学,随后投身出版界。2010年与妻子结婚后,他把出版社的经营权转让