内联函数

✍ dations ◷ 2025-11-27 18:04:43 #最优化

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

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

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

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

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

相关

  • 英国文学英语文学(英语:English literature)指英语写成的文学作品,作者不一定是来自英格兰。如约瑟夫·康拉德是波兰人,罗伯特·伯恩斯是苏格兰人。詹姆斯·乔伊斯来自爱尔兰,爱伦·坡来自
  • 圣赫勒拿、阿森松和特里斯坦-达库尼亚圣赫勒拿、阿森松和特里斯坦-达库尼亚(英语:Saint Helena, Ascension and Tristan da Cunha)是英国的海外领地,由圣赫勒拿岛与其北方的阿森松岛和南方的特里斯坦-达库尼亚群岛共
  • 赛璐玢玻璃纸,或译赛璐玢(Cellophane),是一种用纤维素制成的透明薄膜。因为空气、油、细菌和水都不易透过玻璃纸,使得其可作为食品包装使用。木头、棉花、大麻属植物和其他一些物质中提
  • 电子鼻电子鼻是一种用于检测气味的设备。在过去的几十年中,从电子技术和商业的角度来看,“电子传感”技术得到了迅速发展。所谓“电子传感”是指使用传感器和模式识别系统再现人类感
  • 张肇骞张肇骞(1900年12月1日-1972年1月8日),字冠超,浙江省永嘉县(今温州市)人,中国植物学家,主要从事亚热带植物分类及生态的研究。1920年从浙江省立第十中学(今温州中学)毕业,入金陵大学就读,
  • 夏雨夏雨(1976年10月28日-),山东青岛人,中国大陆男演员。1994年主演电影《阳光灿烂的日子》,并获意大利第51届威尼斯国际电影节最佳男主角奖和第33届金马奖最佳男主角,并成为金马奖最年
  • 拓荒者开拓者(英语:Settler)在以前专用来称呼那些发现未知土地或是在未知的土地上生活的人。如在十九世纪时欧洲移民穿越美国去寻找可以耕种的土地,他们被成为开拓者。他们中间有些人
  • 印度运载火箭发射列表以下列表记录了印度共和国现代航天事业的各次运载火箭的发射情况。发射任务的最终目标高度凡高于地球海平面100千米的卡门线均被收录,未收录探空火箭的亚轨道任务。 (UTC+5½)0
  • AV女优AV女优(日语:AV女優、アダルトビデオ女優),为日本对于成人视频女演员的称谓。英语则称“AV Idol”,强调在色情录像之中当作一种性感偶像、亮丽外表的形象。通常,较有名气的AV女优
  • 穆罕默德·汗·居内久穆罕默德·汗·居内久(英语:Muhammad Khan Junejo,1932年8月18日-1993年3月16日)是巴基斯坦信德省的一名政治人物,曾任巴基斯坦第十任总理。居内久于1932年8月18日在英属印度信德