内联函数

✍ dations ◷ 2025-11-23 12:57:07 #最优化

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

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

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

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

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

相关

  • 雨br /海br /代在月球地质时代里,雨海代发生于38亿5千万年前至38亿年前之间,接续于酒海纪之后,内太阳系后期重轰击期的结束即在此一时期。早雨海世是形成雨海的撞击发生在此一时期刚开始的时
  • 过滤过滤是指分离悬浮在气体或液体中固体物质颗粒的一种单元操作,用一种多孔的材料(过滤介质)使悬浮液(滤浆)中的气体或液体通过(滤液),截留下来的固体颗粒(滤渣)存留在过滤介质上形成滤饼
  • 松本利夫松本 利夫(まつもと としお、别名:MATSU、1975年5月27日-)是日本的舞者、演员。前EXILE的表演者。元J Soul Brothers。神奈川县川崎市出身。LDH所属。受到HIRO影响,16岁的时候与
  • 东京港东京港(日语:東京港/とうきょうこう Tōkyō Kō ?)是位于日本东京都的港口,濒临东京湾,为国土交通省指定的国际战略港湾(日语:国際戦略港湾)和日本三个超级中枢港湾(日语:スーパー中
  • 杨思标杨思标(1920年6月4日-,英语:Sze-Piao Yang),台湾呼吸内科医师,日本东京新潟大学医学博士。曾任台大医院院长、台湾大学医学院院长、慈济护专(今慈济科技大学)首任校长。杨思标于1920
  • 维克森林威克森林大学(英语:Wake Forest University,或译为维克弗斯特大学),是位于美国北卡罗来纳州温斯顿-塞勒姆的一所私立研究型综合性大学(始建于1834年)。在2020年US News全国大学排名
  • 鲁普雷希特 (巴伐利亚王储)鲁普雷希特(Rupprecht,1869年5月18日-1955年8月2日),全名(),巴伐利亚王储,1921年后为巴伐利亚王室首领,称巴伐利亚、法兰克尼亚和士瓦本公爵,莱茵行宫伯爵(Herzog von Bayern, Franken u
  • 戴维·珀杜小戴维·艾尔弗雷德·珀杜(英语:David Alfred Perdue, Jr.;1949年12月10日-),是一位美国共和党政治人物,现任乔治亚州美国参议院议员。珀杜在2014年5月20日的共和党初选(英语:United
  • 金鼹属金鼹属(金鼹),哺乳纲、食虫目的一属,而与金鼹属(金鼹)同科的动物尚有黄毛鼹属(黄毛鼹)、绿鼹属(斯氏绿鼹)等之数种哺乳动物。
  • 凯特·阿普顿凯瑟琳·“凯特”·阿普顿(英语:Katherine "Kate" Upton,1992年6月10日-)是一位美国模特儿及演员,作为2011年《体育画报》的泳装模特而闻名全美,被评选为“年度最佳新秀”,并且是201