问题标签 [inlining]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java中的静态函数内联
第一个代码:
distance
经常被调用。当我用它编译它javac
然后用它反编译时,javap -c
我得到了这个字节码:
似乎javac
没有优化第二个功能,distance
.
我认为第二个代码更快:
及其字节码:
是不是invokestatic
快到和内联静态函数一样?为什么javac
没有优化这个?或者它实际上是经过优化的,这两个代码会给出相同的结果,但我错过了什么?
c++ - 我是否必须在函数实现中重复内联关键字
我总是尝试将实现保持在标题之外,因此对于模板和内联函数,我通常会做这样的事情
我的问题是,对于函数的实际实现重复 inline 关键字,C++ 规范有什么要说的?(如本例所示)
我真的不想这样做,因为它有很多很多函数,虽然我的编译器没有抱怨,但我想知道编译器是否仍然接受内联提示。
有人知道吗?
compiler-construction - 在 LLVM jit 中内联函数
我是 LLVM 框架和编译器领域的新手。我正在尝试熟悉它。在编译器中做了一些初步阅读后,我有以下问题:
我想知道如何在 LLVM JIT 中完成函数内联。它是否与在 jit 编译时使用的静态内联中使用的传递相同,因为我觉得运行时(即 jit 编译时)的信息在静态编译时更好,因此一些更好的优化传递(价格便宜在时间方面)可以使用。
我错过了什么吗?我真的很感谢在这方面的一些帮助。
提前致谢。
android - Android Proguard 不内联
我正在使用最新的 Android SDK (4.1),并尝试导出启用了 Proguard 的签名 jar。但是,在反编译优化后的 APK 后,我注意到我原本期望内联的方法并没有。
我知道 Proguard 运行是因为代码被正确混淆了。所以为了确认这一点,我将此方法添加到我的活动中:
这个私有方法在我的活动中只被调用一次,并且因为它是私有的,所以优化器应该很明显它只被调用一次并且应该被内联。
文档说默认情况下启用所有优化,并且 Proguard “短或仅调用一次的内联方法”。
我应该给 Proguard 一个特定的标志来启用内联吗?
编辑
我的 proguard 配置文件包含
编辑
使用后
我得到了该方法未内联的原因:
但是我不确定该方法testInlining
在该方法中使用的事实是如何被另一个方法使用的,这一事实如何阻止ingetIvConfig
的内联。testInlining
getIvConfig
c++ - C++ 中内联函数包装的限制
我的问题涉及在 C++ 中对函数包装器应用内联优化,考虑以下代码,WorkerStructure 对象是使用封装了一些功能块的函数包装器初始化的。然后在调用 WorkerStructure::doSomeWork 方法时使用函数包装器。
workerFunction 对象封装的功能在应用于 WorkerStructure::doSomeWork 方法时会被内联吗?显然如果功能是在其他翻译单元中定义的,workerFunction 对象只封装了一个函数指针,是否还有其他情况可以内联?不可能吗?
当通过函数包装器传递在不同翻译单元中定义的 lambda 函数时,它实际上等效于传递函数指针吗?
c# - 请问我可以有一个简洁的代码片段会导致 JIT 内联吗?
我正在尝试生成一些会导致 JIT 内联的“Hello World”大小的 C# 代码片段。到目前为止,我有这个:
我从 Visual Studio 编译为“Release”-“Any CPU”和“Run without debugging”。它清楚地显示了我的示例程序程序集的名称,GetAssembly()
没有内联到Main()
中,否则它将显示mscorlib
程序集名称。
如何编写一些会导致 JIT 内联的 C# 代码片段?
c++ - 为什么 MSVC 10.0 编译器经常忽略 inline 关键字?
我有一些非常复杂的 C++ 代码,用于实时系统,因此对速度绝对敏感。它是在 Linux 上开发的,为了加快速度,许多函数都标有“inline”关键字,并移到头文件中以允许内联。
现在我将此代码移植到 Windows(msvc 10.0、Windows 7),它的运行速度慢了大约 30%。在做了一些分析之后,我发现问题基本上是很多函数没有内联。当我改用“__forceinline”时,我很容易看到大约 10-20% 的加速。
有人对此有解释吗?仅仅是msvc中的算法更保守吗?还是我做错了什么,比如缺少配置选项?
performance - 如何在haskell中使用内联的相位控制?
文档说,
有时您想准确控制在 GHC 的管道中何时打开 INLINE pragma。
为什么我要这个?(除了当我也使用 RULES pragma 时,在这种情况下,我可能想推迟函数的内联,以便触发相关的规则。)什么样的函数只在简化过程的特定阶段内联更好?
c - C:将预编译的代码编译为内联
由于一些相当复杂的原因,我有一组文件,我想单独编译然后链接,但是这样一个中的函数被内联放置在第二个中。这是因为我希望它们在 GCC 中使用不同的标志进行编译。我知道我可以通过研究如何解决这个问题来解决这个问题,但我想知道这是否可能。
编辑1:如果没有,是否可以将“外部”函数编译成我可以包含在另一个文件中的程序集形式。是的,疯狂但也很酷……
快速浏览一下,这很可能是一个选择。我想自动编译它是不可能的,所以有人可以给我一些关于汇编的信息吗?我只使用了基本的 ARM 程序集。我已经用-S
GCC 中的标志编译成玩具函数。如何将寄存器与变量链接?它们会始终保持相同的顺序吗?该功能将得到高度优化。我应该什么时候开始和结束提取?我应该.cfi_startproc
在开头和.cfi_def_cfa 7, 8
结尾都包含吗?#
编辑 2:
这篇文章详细介绍了 gcc 如何使用-flto
. 遗憾的是,这仅适用于 4.5 版,我没有也没有能力安装它,因为我没有需要在其上编译它的机器的 root 访问权限。另一种可能的解决方案是解释如何将不同版本的 GCC 安装到 unix 机器上的文件夹中。