内联函数

✍ dations ◷ 2025-09-18 19:37: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为编译单元外部也可见。

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

相关

  • 致畸物质畸形学(英语:Teratology)是研究生理上发展缺陷的学科。人们常常认为它就是研究人类先天性障碍的,但是其实畸形学的覆盖面比这个广得多。除了先天发育之外,它也研究其他的生命阶段
  • X射线X射线(英语:X-ray),又被称为爱克斯射线、艾克斯射线、伦琴射线或X光,是一种波长范围在0.01纳米到10纳米之间(对应频率范围30 PHz到30EHz)的电磁辐射形式。X射线最初用于医学成像诊
  • 2015年世界博览会2015年世界博览会是于意大利米兰举办的世界博览会,日期为2015年5月1日到10月31日。2010年11月23日,国际展览局正式宣布2015年世界博览会由米兰举办。1906年世界博览会曾于米兰
  • 波音公司波音公司(英语:The Boeing Company)是美国一家开发、生产及销售固定翼飞机、旋翼机、运载火箭、导弹和人造卫星等产品,为世界最大的航天航空器制造商。于1997年并购麦克唐纳-道
  • 半深海带半深海带(英语:bathyal zone或bathypelagic)由希腊语:βαθύς(bathýs)衍生而来,这里也被称作午夜区(midnight zone)。这一区域位于海平面下1,000米(3,300英尺)至4,000米(13,000英尺)
  • 方北群方北群(?-)籍贯不详,中国人民解放军少将。方北群曾任中国人民解放军防空兵指挥学院院长等职务。2013年调任中国人民解放军总参谋部军训部副部长。在2015年由中国人民解放军总参谋
  • 邮电局邮电局(葡萄牙语:Direcção dos Serviços de Correios e Telecomunicações)其邮政范畴的对外品牌名称为:澳门邮政(葡萄牙语:Correios de Macau)。邮电局是澳门特别行政区政府下
  • Inmarsat国际海事卫星组织(英语:Inmarsat plc,International Maritime Satellite Organization,LSE:ISAT)是英国的卫星通信公司,提供全球性的移动服务。以11个地球静止轨道通信卫星,通过便携
  • 达椿达椿(满语:ᡩᠠᠴᡠᠨ,穆麟德:,18世纪?-1802年),字香圃,乌苏氏,满洲镶白旗人。清朝官员。达椿于乾隆二十五年(1760年)成三甲进士,选庶吉士,散馆授户部主事,迁员外郎。历任翰林院侍讲、侍读、
  • 瑞天咸瑞天咸爵士(英语:Sir Frank Athelstane Swettenham,1850年3月28日-1946年6月11日),英国殖民地官员。 他于1896年至1901年任第一位英国首位驻马来联邦代表,管治雪兰莪、霹雳州等马来