内联函数

✍ dations ◷ 2025-11-28 08:19:49 #最优化

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

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

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

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

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

相关

  • 创办人创办人,是一个企业、组织、社团、基金、网站等的主力创立人。创办人通常所指的是在第一份公司董事注册、社团理监事名册、组织高级成员中有名字的人物。对于该组织,他们都是具
  • Uppsala UniversityUniversitas Regia Upsaliensis Academia Regia Upsaliensis栗色 白色乌普萨拉大学(瑞典语:Uppsala universitet)是一所世界知名的瑞典国立综合性大学,其位于斯德哥尔摩西北78
  • 盐城市盐城市,简称盐,又称盐阜,古称盐渎,是中华人民共和国江苏省下辖的地级市,位于江苏省中东部沿海。海岸线长582千米,占全省海岸线总长度的61%。市境南邻南通市、泰州市,西界扬州市、淮
  • 哈佛大学哈佛学院(英文:Harvard College)为一所坐落于美国马萨诸塞州剑桥的本科教育机构。学校最初以“新学院”之名于1636年成立,是哈佛大学的源流,并为全美第一所高校。现隶属哈佛大学
  • 共产党和工人党国际会议已消亡 已放弃共产主义意识形态 已消亡 已放弃共产主义意识形态 已消亡 已放弃共产主义意识形态 已消亡 已消亡 已放弃共产主义意识形态 共产党和工人党国际会议(英语:I
  • 德拉甘·乔维奇德拉甘·乔维奇(克罗地亚语:Dragan Čović;1956年8月20日-)是一位波赫克罗地亚人政治家。他是波斯尼亚赫塞哥维纳克罗地亚民主联盟的党魁。乔维奇在1994年加入波斯尼亚赫塞哥维
  • 休斯顿·斯图尔特·张伯伦休斯顿·斯图尔特·张伯伦(英语:Houston Stewart Chamberlain 1855年9月9日-1927年1月9日)德国英国裔政治哲学、自然科学及瓦格纳传记作家。《牛津国家人物传记大辞典》中称他为
  • 杜安·艾迪杜安·艾迪(英语:Duane Eddy,1938年4月26日-)是美国吉他手。自1950年代末至1960年代初,他与身兼歌手、唱片骑师和制作人的李·黑兹尔伍德(英语:Lee Hazlewood)合作发行许多热门作品,并
  • 俄罗斯的乌兹别克族俄罗斯有一个大的乌兹别克族移民团体,在2016年有190万人。他们多是外劳,在苏联解体后来到俄罗斯,他们多住在莫斯科。因为种族和文化的差异他们受俄罗斯人歧视。关于乌兹别克人
  • 奥克萨娜·伊尔马科娃奥克萨娜·伊万诺夫娜·沃沃迪娜(爱沙尼亚语:Oksana Ivanovna Jermakova,俄语:Оксана Ивановна Ермакова,1973年4月16日-),出生于塔林,爱沙利亚/俄罗斯女子击