内联函数

✍ dations ◷ 2025-06-30 19:05:24 #最优化

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

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

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

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

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

相关

  • 鬼臼毒素鬼臼毒素,也称普达非洛,是一种一个非生物碱类木脂素类毒素。它提取自鬼臼的根茎。它的乙醇溶液和软膏的商品名分别为慷定来和化疣敌,可作为外用药物用于治疗由人类乳头瘤病毒引
  • 幽门窦幽门(pylorus)是胃和十二指肠的连接口,包含幽门窦(pyloric antrum)和幽门管(pyloric canal)两个部分。幽门括约肌(pyloric sphincter)在幽门管末端,可以控制食物从胃进入十二指肠的过
  • 起始因子起始因子(英语:Initiation factors)是指翻译起始阶段端结合到核糖体小亚基上的一些蛋白质,翻译是蛋白质生物合成中的一部分。主要分为三种:氨酰-tRNA合成酶 · 阅读框架 · 起始
  • 卢拉赫卢拉赫王(中世纪盖尔语:Lulach mac Gille Coemgáin;Modern Gaelic: Lughlagh mac Gille Chomghain,英语化简称:Lulach,早于1033年 - 1058年3月17日),被以绰号称作“不幸王”(中世纪
  • 约翰·埃文斯 (考古学家)约翰·埃文斯爵士,或译约翰·伊文思KCB,FRS(英语:Sir John Evans,1823年11月17日-1908年5月31日),英格兰古文物专家、古钱学家、史前考古学家。他有三本著作:《The Coins of the Anci
  • 宝岛社宝岛社有限公司(株式会社宝島社(たからじましゃ))为总部位于东京都千代田区的出版社。主要以面向年轻读者发行亚文化及时尚方面的杂志或导读指南而出名。宝岛社成立于1971年9月2
  • 孤蓬万里孤蓬万里(1926年4月1日-1998年12月15日),台湾作家、歌人、医师,本名吴建堂。台湾台北市人。创作包括和歌和俳句。1943年台北州立台北第二中学校第17期毕业、现(台北市立成功高级中
  • 反羽蟹科见内文Ptenoplacidae Alcock, 1899反羽蟹科(学名:Retroplumidae)是幽灵蟹总科(Retroplumoidea)下唯一的单系科。反羽蟹科下有8个属,但只有Bathypluma及反羽蟹属两个属有发现现存物
  • 浠水话浠水话浠水方言湖北省黄冈市浠水县浠水话是浠水县人说的一种方言,虽然浠水县位于黄冈市境内,但是浠水话与黄冈话还是有一些差别。浠水话儿化音严重,它的声调除了普通话能标注出
  • 合肥四大名点合肥四大名点是合肥四种较有名的甜点所组成,有麻饼、烘糕、寸金、白切片。是当地的特色小吃,也是当地传统甜点。这四大名点是以配料、风味而名闻遐迩。形如月饼,表面金黄.圆边浅