内联函数

✍ dations ◷ 2025-11-16 12:49:58 #最优化

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

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

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

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

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

相关

  • 蓝湖蓝湖可以指:
  • 蝎王二世蝎王二世(古埃及语:可能是Selk或Weha),也被称为蝎子王,是传说中比美尼斯更早统一上下埃及的王。
  • 巴顿·芬克《巴顿·芬克》(英语:Barton Fink)是一部1991年的美国时代电影,由科恩兄弟执导、监制和编剧,获得戛纳电影节金棕榈奖,并入围奥斯卡奖3项大奖,包括奥斯卡最佳男配角奖。一名具有社会
  • 平桥区平桥区位于河南省信阳市西部,淮河上游,是由原信阳地区撤地设市后重设的两个区之一(平桥区,浉河区)。下辖:羊山街道、前进街道、南京路街道、平桥街道、甘岸街道、五里店街道、明港
  • 计算机系统结构计算机系统结构(computer architecture、计算机系统架构),抽象来说计算机系统架构是一个系统在其所处环境中最高层次的概念;它确定一台计算机硬件和软件之间的链接。具体地说计
  • 流动镶嵌模型生物膜的流动镶嵌模型(英语:Fluid mosaic model)由S. J. 辛格(英语:Seymour Jonathan Singer)和G. L. 尼克森(英语:Garth L. Nicolson)提出,主要指生物膜由蛋白质和磷脂组成,磷脂双
  • 反相色谱法逆向层析(英语:Reversed-phase chromatography,RPC)包含了任何一种使用非极性固定相的色谱学方法。“反相”这个词有着其历史背景。在1970年代,大多数液相色谱是在未修饰的氧化硅
  • 波佩克与戈德堡虚拟化需求波佩克与戈德堡虚拟化需求(英语:Popek and Goldberg virtualization requirements)是一组充分条件,用于验证某一计算机体系结构可否被有效虚拟化。杰拉尔德·J·波佩克与罗伯特
  • 蔑戾车蔑戾车(梵语:म्लेच्छ,mleccha,意为不信吠陀的、野蛮人、蛮族),又译为弥利车、弥离车、蜜利车、篾隶车、毕栗车,意译为边地,指古印度非雅利安种族和外国血统的人,可能是指印度
  • Nokia 7Nokia 7是一款HMD Global制造的、运行Android操作系统的诺基亚品牌中高端智能手机。此款手机于2017年10月19日发布,并于10月24日在中国独家发售。Nokia 7搭载了中高端的高通