内联函数

✍ dations ◷ 2025-12-01 00:54:18 #最优化

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

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

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

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

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

相关

  • 鳞龙超目鳞龙超目(学名:Lepidosauria)又称鳞龙总目,是群有重叠鳞片的爬行动物。它们包括喙头蜥、蜥蜴、蛇、蚓蜥。鳞龙超目是现今爬行动物中最成功的一群。鳞龙超目是蜥形纲下的一个超目
  • 谷登堡计划谷登堡计划(Project Gutenberg,缩写:PG),由志愿者参与,致力于将文化作品的数字化和归档,并鼓励创作和发行电子书。该工程肇始于1971年,是最早的数字图书馆。其中的大部分书籍都是公
  • 自然系统第十版《自然系统》第十版是由生物学家卡尔·林奈所撰写的书籍,于1758年和1759年分别出版上下两卷。这一版本的《自然系统》标志了动物命名法规走向系统化的开始。在这本书中,林奈为
  • 夏侯婴夏侯婴(?-前172年),泗水郡沛县(今日江苏沛县)人。汉朝开国功臣,封太仆,人称“滕公”。夏侯婴早年在沛县县里赶车,每次送使者、客人路过沛县泗上亭时,都会和刘邦聊天,非常谈得来。不久,夏
  • MURMURSHOW《MURMURSHOW》是由利得汇和沈志方组成的二人组合慢慢说乐团的首张全创作专辑,于2014年4月16日推出。由利得汇和沈志方组成的二人组合于2014年春、发行首张全创作专辑“MURMU
  • 女本位主义女本位主义(英语:Gynocentrism)指一切唯独从女性视角出发看待问题的世界观,一切以女性立场为唯一参考系来评判是非对错的价值体系,一切仅从女性视角和角度出发的思维方式,和一切只
  • 孛儿帖孛儿帖(蒙古语:.mw-parser-output .font-mong{font-family:"Menk Hawang Tig","Menk Qagan Tig","Menk Garqag Tig","Menk Har_a Tig","Menk Scnin Tig","Oyun Gurban Ulus Ti
  • 是枝裕和是枝裕和(日语:是枝 裕和/これえだ ひろかず  ,1962年6月6日-),日本电影导演、编剧和电影制片人。是枝于1962年出生于东京都练马区, 高中就读于东京都立武藏高中(日语:東京都立武蔵
  • 万代福影城万代福影城是位于台湾台中市中区的电影院,设于台中公园电影大楼的B1至4楼。以播放二轮电影和首轮艺术电影为主,并时常与台中市政府文化局和国立台湾美术馆等相关单位合作协办
  • 克劳福德维尔 (佛罗里达州)克劳福德维尔(英语:Crawfordville)是一个非建制地区,也是美国佛罗里达州沃库拉县的县城。