内联函数

✍ dations ◷ 2025-12-09 21:58:50 #最优化

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

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

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

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

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

相关

  • 人体人体是一个人的整个结构。 它由许多不同类型的细胞组成,一起产生组织和随后的器官系统。 它们确保体内稳态和人体的生存能力。它包括头部,颈部,躯干(包括胸部和腹部),胳膊和手,腿和
  • 印何阗印何阗(英语:Imhotep,Immutef;Im-hotep或Ii-em-Hotep,/ɪmˈhoʊtɛp/; 埃及语拉丁转写:ỉỉ-m-ḥtp *jā-im-ḥātap,埃及圣书字记法:
  • 齐格勒卡尔·齐格勒(Karl Waldemar Ziegler,1898年11月26日-1973年8月11日),德国化学家。在聚合反应催化剂研究方面有很大贡献,并因此与意大利化学家居里奥·纳塔共同获得1963年诺贝尔化
  • 正铁血红蛋白高铁血红蛋白(也称变性血红素,英语:Methemoglobin或英语:Methaemoglobin)是氧携带金属蛋白血红蛋白的一种形式,这种血红蛋白中血红素基团里的铁离子呈正三价状态(高铁状态,Fe3+),并不
  • 中国科学技术协会中国科学技术协会,简称中国科协,是中华人民共和国的科学技术专业人民团体。1958年9月,“中华全国自然科学专门学会联合会”和“中华全国科学技术普及协会”合并组建中华人民共
  • 高尔夫频道高尔夫台(Golf Channel,1995年至2007年曾名为The Golf Channel)是美国的一个有线电视和卫星电视频道,由NBC环球旗下的NBC体育集团所有。高尔夫台专门播出有关高尔夫的节目,创建于
  • 潘奕如潘奕如(1978年3月19日-),台湾女演员,毕业于台北艺术大学戏剧系,主修表演。2018年以《清风无痕》入围第53届金钟奖最佳女配角。 2014 udn talks联合大讲堂【潘奕如:面对恐惧的终极法
  • 小川纱季小川纱季(1996年11月18日-)是日本女性偶像艺人,出生于埼玉县。Hello! Project Egg成员,此后加入ZYX-α、S/mileage。2011年宣布退出演艺圈。
  • 独立和劳动党独立和劳动党(法语:Parti de l'Indépendence et du Travail)是塞内加尔的一个社会主义政党。该党曾经奉行共产主义意识形态,目前已放弃。该党的前身是非洲独立党塞内加尔支部。
  • 三相交通理论三相交通理论,是玻里斯·柯纳在1996至2002年间提出的一种交通流理论 。它着重研究如何解释高速公路上交通拥堵转捩的物理原理以及拥堵交通流的性质。不同于经典的基于基本图