问题标签 [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.

0 投票
5 回答
4284 浏览

c++ - 在派生类中声明的虚函数

0 投票
5 回答
257 浏览

java - Java中的静态函数内联

第一个代码

distance经常被调用。当我用它编译它javac然后用它反编译时,javap -c我得到了这个字节码:

似乎javac没有优化第二个功能,distance.

我认为第二个代码更快:

及其字节码:

是不是invokestatic快到和内联静态函数一样?为什么javac没有优化这个?或者它实际上是经过优化的,这两个代码会给出相同的结果,但我错过了什么?

0 投票
2 回答
281 浏览

c++ - 我是否必须在函数实现中重复内联关键字

我总是尝试将实现保持在标题之外,因此对于模板和内联函数,我通常会做这样的事情



我的问题是,对于函数的实际实现重复 inline 关键字,C++ 规范有什么要说的?(如本例所示)

我真的不想这样做,因为它有很多很多函数,虽然我的编译器没有抱怨,但我想知道编译器是否仍然接受内联提示。

有人知道吗?

0 投票
1 回答
614 浏览

compiler-construction - 在 LLVM jit 中内联函数

我是 LLVM 框架和编译器领域的新手。我正在尝试熟悉它。在编译器中做了一些初步阅读后,我有以下问题:

我想知道如何在 LLVM JIT 中完成函数内联。它是否与在 jit 编译时使用的静态内联中使用的传递相同,因为我觉得运行时(即 jit 编译时)的信息在静态编译时更好,因此一些更好的优化传递(价格便宜在时间方面)可以使用。

我错过了什么吗?我真的很感谢在这方面的一些帮助。

提前致谢。

0 投票
2 回答
3783 浏览

android - Android Proguard 不内联

我正在使用最新的 Android SDK (4.1),并尝试导出启用了 Proguard 的签名 jar。但是,在反编译优化后的 APK 后,我注意到我原本期望内联的方法并没有。

我知道 Proguard 运行是因为代码被正确混淆了。所以为了确认这一点,我将此方法添加到我的活动中:

这个私有方法在我的活动中只被调用一次,并且因为它是私有的,所以优化器应该很明显它只被调用一次并且应该被内联。

文档说默认情况下启用所有优化,并且 Proguard “短或仅调用一次的内联方法”。

我应该给 Proguard 一个特定的标志来启用内联吗?

编辑

我的 proguard 配置文件包含

编辑

使用后

我得到了该方法未内联的原因:

但是我不确定该方法testInlining在该方法中使用的事实是如何被另一个方法使用的,这一事实如何阻止ingetIvConfig的内联。testInlininggetIvConfig

0 投票
2 回答
520 浏览

c++ - C++ 中内联函数包装的限制

我的问题涉及在 C++ 中对函数包装器应用内联优化,考虑以下代码,WorkerStructure 对象是使用封装了一些功能块的函数包装器初始化的。然后在调用 WorkerStructure::doSomeWork 方法时使用函数包装器。

workerFunction 对象封装的功能在应用于 WorkerStructure::doSomeWork 方法时会被内联吗?显然如果功能是在其他翻译单元中定义的,workerFunction 对象只封装了一个函数指针,是否还有其他情况可以内联?不可能吗?

当通过函数包装器传递在不同翻译单元中定义的 lambda 函数时,它实际上等效于传递函数指针吗?

0 投票
2 回答
145 浏览

c# - 请问我可以有一个简洁的代码片段会导致 JIT 内联吗?

我正在尝试生成一些会导致 JIT 内联的“Hello World”大小的 C# 代码片段。到目前为止,我有这个:

我从 Visual Studio 编译为“Release”-“Any CPU”和“Run without debugging”。它清楚地显示了我的示例程序程序集的名称,GetAssembly()没有内联到Main()中,否则它将显示mscorlib程序集名称。

如何编写一些会导致 JIT 内联的 C# 代码片段?

0 投票
2 回答
709 浏览

c++ - 为什么 MSVC 10.0 编译器经常忽略 inline 关键字?

我有一些非常复杂的 C++ 代码,用于实时系统,因此对速度绝对敏感。它是在 Linux 上开发的,为了加快速度,许多函数都标有“inline”关键字,并移到头文件中以允许内联。

现在我将此代码移植到 Windows(msvc 10.0、Windows 7),它的运行速度慢了大约 30%。在做了一些分析之后,我发现问题基本上是很多函数没有内联。当我改用“__forceinline”时,我很容易看到大约 10-20% 的加速。

有人对此有解释吗?仅仅是msvc中的算法更保守吗?还是我做错了什么,比如缺少配置选项?

0 投票
2 回答
680 浏览

performance - 如何在haskell中使用内联的相位控制?

文档

有时您想准确控制在 GHC 的管道中何时打开 INLINE pragma。

为什么我要这个?(除了当我也使用 RULES pragma 时,在这种情况下,我可能想推迟函数的内联,以便触发相关的规则。)什么样的函数只在简化过程的特定阶段内联更好?

0 投票
2 回答
205 浏览

c - C:将预编译的代码编译为内联

由于一些相当复杂的原因,我有一组文件,我想单独编译然后链接,但是这样一个中的函数被内联放置在第二个中。这是因为我希望它们在 GCC 中使用不同的标志进行编译。我知道我可以通过研究如何解决这个问题来解决这个问题,但我想知道这是否可能。

编辑1:如果没有,是否可以将“外部”函数编译成我可以包含在另一个文件中的程序集形式。是的,疯狂但也很酷……

快速浏览一下,这很可能是一个选择。我想自动编译它是不可能的,所以有人可以给我一些关于汇编的信息吗?我只使用了基本的 ARM 程序集。我已经用-SGCC 中的标志编译成玩具函数。如何将寄存器与变量链接?它们会始终保持相同的顺序吗?该功能将得到高度优化。我应该什么时候开始和结束提取?我应该.cfi_startproc在开头和.cfi_def_cfa 7, 8结尾都包含吗?#

编辑 2: 这篇文章详细介绍了 gcc 如何使用-flto. 遗憾的是,这仅适用于 4.5 版,我没有也没有能力安装它,因为我没有需要在其上编译它的机器的 root 访问权限。另一种可能的解决方案是解释如何将不同版本的 GCC 安装到 unix 机器上的文件夹中。