内联函数

✍ dations ◷ 2025-11-26 16:13:10 #最优化

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

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

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

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

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

相关

  • 莫尼斯安东尼奥·埃加斯·莫尼斯(António Egas Moniz,1874年11月29日-1955年12月13日),全名António Caetano de Abreu Freire Egas Moniz,葡萄牙精神病学家和神经外科医生。他由于发现
  • 旧振南饼店旧振南食品股份有限公司(简称:旧振南饼店),创立于公元1890年(清光绪十六年)。日治时代,第一代创立者于台南府城经营菓子制造业,之后阿祥师到高雄创立“振南饼铺”,成为旧振南在高雄的
  • 傣那德宏傣语,又称傣纳语、傣那语,是德宏傣族人的语言,主要分布于中国云南省的德宏傣族景颇族自治州、普洱市、临沧市和保山市,缅甸、老挝也有分布。属于侗台语系台语支,和泰语有亲属
  • 南京气象学院南京信息工程大学(英语:Nanjing University of Information Science & Technology,缩写作 NUIST),前身为南京气象学院,始建于1960年,于2004年更名为南京信息工程大学,是由江苏省人民
  • 大隅群岛大隅群岛(日语:大隅諸島/おおすみしょとう Ōsumi-shotō)位于日本九州鹿儿岛县大隅半岛佐多岬南方,是琉球群岛北部(萨南群岛)的一个群岛,属于鹿儿岛县。大隅群岛的主要岛屿包括种
  • 穆罕默德·纳吉布拉穆罕默德·纳吉布拉·阿赫马德扎伊(普什图语:ډاکټر نجیب ﷲ احمدزۍ‎,英语:Mohammed Najibullah Ahmadzai,1947年8月6日-1996年9月28日),阿富汗政治家、共产主义者,出生
  • 非甾体抗炎药非甾体消炎药(英语:Non-Steroidal Anti-Inflammatory Drug,縮寫作NSAID),也译作非类固醇抗炎药,是一类具有解热镇痛效果的药物,在施用较高剂量时也具有消炎作用。“非甾体”一词用
  • 信息抽取信息抽取(Information Extraction,简称IE,又译信息截取技术)主要是从大量文字数据中自动抽取特定消息(Particular Information),以作为数据库访问(Database Access)之用的技术。信息
  • 爱情万万岁 (韩国电视剧)《爱情万万岁》(韩语:애정만만세,英语:Bravo, My Love!),为韩国MBC自2011年7月16日起制播的周末特别计划剧。請回答1997
  • 椪柑椪柑(英文:Ponkan、Chinese honey orange;学名:)属柑橘类,柑的一种,原产于台湾。原产于台湾,其他产地包括台湾台南市、台中市、嘉义县和日本、菲律宾、马来西亚、中国大陆南部等地。