内联函数

✍ dations ◷ 2025-05-19 06:44:09 #最优化

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

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

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

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

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

相关

  • 语音识别语音识别(speech recognition)技术,也被称为自动语音识别(英语:Automatic Speech Recognition, ASR)、电脑语音识别(英语:Computer Speech Recognition)或是语音转文本识别(英语:Speech
  • 杆菌状核糖核酸病毒科杆菌状核糖核酸病毒科: Barnaviridae名称来源: Barna:杆菌状类型(bacilliform)-核糖核酸(RNA)的缩并字。
  • 成吉思汗纪年成吉思汗纪年是日本扶植的“蒙疆联合自治政府”使用的纪元。即以1206年铁木真称成吉思汗之年为成纪元年。在1936年-1945年记为成纪731年-740年。1945年日本二战投降后,蒙疆政府
  • 冷发光冷发光(Luminescence)指物体在发光过程中不产生大量的热量,温度没有明显的升高,一般保持在常温。主要包括:
  • 贵溪贵溪市位于江西省东北部,是中国的铜工业中心。目前贵溪市三面包围了鹰潭市区,全市通行赣方言,并与福建省相毗邻。境内有国家重点风景名胜区、道教仙山——龙虎山。唐代置贵溪县
  • 欧亚猞猁(L. lynx)亚欧猞猁、又称欧亚猞猁(学名:Lynx lynx; 汉语拼音:Ōu-Yà shēlì,注音符号:ㄡ ㄧㄚˋ ㄕㄜ ㄌㄧˋ) 是一种产于欧洲和西伯利亚森林的中型猫科动物,一般直接称猞猁。猞猁外形似猫
  • 芋圆芋圆是一道著名的台湾传统甜点。芋圆是在1946年被研发出来的,创始者为蔡林保云,居住在瑞芳。蔡林保云于1938年嫁到瑞芳,帮忙婆家经营杂货店,一开始在门口卖梅子清冰供路人止渴,后
  • 哥哥的前半生《哥哥的前半生张国荣入门三十首》是华星唱片在1996年推出的一张张国荣精选专辑。 专辑主张收录张国荣在华星唱片时代的经典歌曲。张在八十年代初加盟华星后,事业一帆风顺,成
  • 穿心莲穿心莲(学名:)为爵床科一年生草本植物。植株直立、多枝,枝呈方术形,棱角明显;叶对生,披针形或狭披针形,长约2至8厘米,宽5至25毫米。夏秋开花,白色或淡紫色,排成顶生或腋生的总状花序。
  • 史贻直史贻直(1682年-1763年),字儆弦,号铁崖,江苏省镇江府溧阳县人,中国清朝官员,历官康熙、雍正、乾隆三朝。父史夔是康熙二十一年进士,官至詹事。史贻直少娴掌故,康熙三十八年(1699年)己卯科