我最近看到我的朋友编写的一个 Util
类有很多内联
方法。该类与图像有关,并且具有诸如
public static inline function resize ( img:Image, width:Int, height:Int)
{
//... method implementation goes here.
}
我问他为什么要使用内联
。我知道编译器会更改
var img:Image = ImgUtil.resize(img, 100, 100);
到
var img:Image = // Implementation of method here
他只是说,它减少了对函数的调用,并且只在实用程序方法上使用它们。每次复制相同的代码不会增加程序大小吗?
现在需要这个吗?如果需要,应该在什么时候使用它们?
编辑
我在Patrick提供的一个列表中列出了大多数问题和优点,以帮助那些不想浏览链接的未来观众。
问题
用扩展的函数体替换调用站点可能会以几种方式恶化性能:
通常,编译器开发人员会记住这些问题,并在编译器中加入启发式,以选择内联哪些函数,从而在大多数情况下提高性能,而不是恶化性能。
优势:
内联扩展本身是一种优化,因为它消除了调用的开销,但它作为启用转换更为重要。也就是说,一旦编译器在其调用站点的上下文中扩展函数体(通常使用可能是固定常量的参数),它就可以执行以前不可能的各种转换。例如,条件分支可能总是为真或总是假在这个特定的调用站点上。这反过来又可以实现死代码消除、循环不变代码运动或归纳变量消除。
维基百科会告诉你比你需要的更多的信息。
问题内容: 我一直在试图理解真正的含义: 内联函数 在C ++中,是在类声明中定义的成员函数。(2)编译器用该函数的实际代码替换的函数调用。关键字inline可用于提示编译器对成员或非成员函数的主体执行内联扩展。 排队 在编译过程中用函数代码的副本替换函数调用。 例如,它写成类似: 当方法为最终方法时,可以内联。 此处:http : //www.roseindia.net/javatutorial
问题内容: 当我看到网站入门代码和示例时,CSS始终位于单独的文件中,命名为“ main.css”,“ default.css”或“ Site.css”。但是,当我编写页面代码时,经常会想将CSS与DOM元素直接插入一行,例如在图像上设置“ float:right”。我感觉这是“不良编码”,因为在示例中很少这样做。 我知道,如果将样式应用于多个对象,则应遵循“不要重复自己”(DRY)并将其分配给每
问题内容: 什么是最好的Java图像处理库/方法?[关闭]我同时使用JAI媒体API和ImageMagick吗? ImageMagick存在一些可伸缩性问题,基于JNI的JMagick也没有吸引力。与ImageMagick相比,JAI执行大小调整操作时的质量结果较差。 有谁知道过任何出色的开源或商业工具,它们都是本机Java并可以提供高质量的结果? 问题答案: 我知道这个问题已经很老了,但是随着新
问题内容: 我指的是这种讨论。我从未用C或C++编写任何代码。我没有任何CS背景。但是,我从事Java开发人员已有5年了,现在我决定学习更多有关CS的知识,并进行一些后续工作。 问题答案: 在执行给定的代码段时,无论何时调用标准函数,执行时间都比将其中包含的代码转储到该函数中略高。每当在函数中包含的整个代码都无法维护时,就进行转储,因为这显然会导致整个代码重复。 内联 通过让您将函数声明为 内联(
我刚刚开发了一个Android应用程序(MINSDKVersion23/TargetSDKVersion29),它可以连接到BluetoothLE设备以定期获取数据。 现在,在MainActivity(不是第一个活动)中,我执行以下注册BroadcastReciever的操作: 当设备连接/发现/datareCieved时执行的所有回调都在StatusActivity中,而不是在BleServic
除了直接绑定到一个方法,也可以在内联 JavaScript 语句中调用方法: <div id="example-3"> <button v-on:click="say('hi')">Say hi</button> <button v-on:click="say('what')">Say what</button> </div> new Vue({ el: '#example-3'