内联函数

✍ dations ◷ 2025-12-01 07:03:11 #最优化

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

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

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

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

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

相关

  • 误诊医疗疏失,又称医疗过失、医疗错误、医疗失误,通常指可以被避免的医疗照护不良反应,无论它是否明显的被证明对病人有危害。它可能是源自于不精确或错误的诊断、或疗法。造成严重
  • 黎德寿黎德寿(越南语:Lê Ðức Thọ,1911年10月14日-1990年10月13日),或译为黎得寿,原名潘廷启(Phan Đình Khải),越南政治人物、军人、革命家、外交官,前越南社会主义共和国和越南共产党
  • 东方世界东方世界可以指:
  • 蛮野社团法人台湾蛮野心足生态协会(英语:Wild at heart Legal Defense Association, Taiwan),简称蛮野,是台湾一个环境法律团体,于2003年成立。台湾蛮野心足生态协会是由原籍美国的律
  • 上清宫上清宫位于台湾台北市复兴三路,为主祀鸿钧老祖之道教庙宇。该建物兴建于1955年,今为位于台北北投区之仿古庙宇建筑。另外,该庙宇的组织型态为管理人制,祭典日期则是每年农历之五
  • 艾蒂安·勒努瓦艾蒂安·勒努瓦(法语:Étienne Lenoir,1822年-1900年),法国、比利时工程师。生于Mussy-la-Ville(当时在卢森堡,从属于比利时)。1850年代早期迁居法国,在巴黎定居,在那儿对电镀术产生兴
  • 伊格内修斯·库图·阿昌庞伊格内修斯·库图·阿昌庞上将(General Ignatius Kutu Acheampong,发音: /əˈtʃæmˈpɒŋ/,,1931年9月23日-1979年6月16日)加纳前军政府领袖和国家元首(1972—1978年)。1978年7月5
  • 日本海沟日本海沟是位于日本之东北的北太平洋的一个海沟,是环太平洋火山带的一部分。它从千岛群岛伸延至小笠原群岛,最深处达8,020米。日本海沟北到北海道的襟裳岬海域大幅东拐到千岛
  • 程梦星程梦星(1679年-1755年),字午桥,号洴江;又字午乔,号香溪。安徽歙县人。祖父程之韺是扬州盐商,父程文正官至工部主事。程梦星生于康熙十八年(1679年),弱冠即有诗名,“于艺事无所不能,尤工书
  • 反特征值理论在应用数学中,反特征值理论(antieigenvalue theory)应用于数值分析、小波、统计学、量子力学、金融以及最优化,由Karl Gustafson于1966至1968年间创立。一个矩阵或算子