内联函数

✍ dations ◷ 2024-12-22 16:06:17 #最优化

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

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

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

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

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

相关

  • 阿莲区阿莲区(西拉雅语:Alien;台湾话:.mw-parser-output .sans-serif{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Lato,"Helvetica Neue",Helvetica,Arial,sans
  • 2007年贝娜齐尔·布托遇刺案阴谋论贝娜齐尔·布托遇刺案发生于2007年12月27日,巴基斯坦前总理暨反对党巴基斯坦人民党领袖贝娜齐尔·布托于拉瓦尔品第参加竞选集会时被一名枪手开枪击中颈部和胸部,袭击者随后引
  • 泽套语泽塔尔语是使用于墨西哥恰帕斯州的玛雅语系语言。根据一般认定,泽塔尔语目前共有六种不同的方言,与索西语和乔尔语都是玛雅语族乔尔泽塔尔语支的子分支语言,但泽塔尔语与索西语
  • 巽他人.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:
  • 黄焖鸡黄焖鸡是一道起源于中国山东济南并在中国各地流行的菜肴,主要原料有鸡肉(通常为鸡腿肉)、青椒和香菇,加入多种调料,放入锅内(通常为砂锅或石锅)炖煮而成。也可根据食客需要加入金针
  • 李秀芳李秀芳(Benjamin Brueyre,1810年5月20日-1880年2月24日), 是一位法国耶稣会神父,19世纪耶稣会在中国的传教士。他在1842年进入中国,是自1724年清朝查禁天主教以后,最早进入中国的耶
  • 艾哈迈德·阿拉比艾哈迈德·阿拉比(阿拉伯文:أحمد عرابي‎,1841年4月1日-1911年9月21日)是前埃及军官。早年深受哲马鲁丁·阿富汗尼思想的影响。1875年加入青年埃及协会。1879年创立祖国
  • 豌豆星系豌豆星系,也称为豌豆或绿豌豆,是一种有着异乎平常的恒星形成比率,可能是新类型的明亮蓝致密星系。豌豆星系是因为史隆数位巡天 (SDSS) 得到的图像都是体积小且呈现淡绿色外观而
  • 金鸿钧金鸿钧(1937年9月-),满族,爱新觉罗氏,北京人,中国工笔花鸟画家。中央文史研究馆馆员。他是清太祖努尔哈赤第十五子豫亲王多铎第十二世孙。
  • 灰釉直纹双耳罐灰釉直纹双耳罐,又称青瓷直条纹双系罐,高22.1公分、腹宽约34.5公分、口径17.5公分,是战国年间的瓷器,现存于国立故宫博物院。春秋、战国时期,江苏、浙江一带盛行烧造高温灰釉器。