问题标签 [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 投票
0 回答
815 浏览

javascript - Javascript函数内联

我有以下函数,它将 3 个元素从一个类似数组的对象复制到另一个:

该函数每帧调用数万次。

几乎所有对它的调用都来自我代码中的一个地方。

如果我在该单个位置手动内联它,以便直接在调用者中完成集合,我的代码会变得更快,这意味着引擎没有内联它。

有没有办法确保 JS 引擎内联它?这显然是一个热门功能。是否有任何奇怪的注释,或者反之亦然一些不允许引擎内联函数的代码模式?

我有许多类似的函数,用于处理向量和矩阵,因此在所有地方开始手动内联会非常麻烦和丑陋。

0 投票
1 回答
140 浏览

templates - Idris 可以内联用作参数的函数吗?

在 C++ 中,如果您要编写自己的sort带有比较谓词参数的通用函数模板,那么编译器将能够内联该谓词。

在 C: 中不是这种情况:qsort被编译一次,并且它的比较谓词参数永远不会内联(也许编译器/链接器的最新技术水平最近有所改进,所以如果我的信息已过时,请纠正我)

这对 C++ 中的泛型编程(当然不仅仅是sort函数)来说是一个福音:您可以获得相同的性能,而在 C 中,您必须放弃泛型(或使用宏)。

我的问题是:Idris 可以做 C++ 在这里做的事情吗?它可以内联用作参数的函数吗?

0 投票
1 回答
103 浏览

c++ - 允许在调试模式 Visual Studio 中内联特定标头

是否可以有一个构建设置,其中允许在调试构建中内联特定标头?我正在使用我在一个单独的项目中测试的信号/委托模式。我希望我的主项目在遇到断点时不要在调用堆栈中显示回调的信号/委托部分。是否可以在不优化主项目的情况下允许在仅标头库上内联函数,或者是否有其他方法可以从调用堆栈接口过滤对仅标头库的调用。

0 投票
1 回答
1090 浏览

java - jvm +LogCompilation输出中“被调用者太大”的含义

所以在 +LogCompilation 的输出中有打印的消息

与特定方法相关联(以及编译器不内联的决定)。

但是“被调用者”不是方法本身吗?还有什么意思?如果是这样,“被调用者太大”和“太大”之间有什么区别-它们的意思不是一样吗(也许这只是一个遗留日志消息,2个工程师使用不同的语言来做同一件事?)

或者“被调用者”是否真的意味着“调用者”?
不内联的任何一个原因都是合法的。我有点不好意思,我不明白这一点。

0 投票
1 回答
80 浏览

c - 这种内联结果常见吗?

由于大学工作,我不得不研究一个简单的优化,即内联。

这是基本代码:

这是带有内联的代码:

使用选项 -O0 和 gcc 进行编译,基本版本的结果是 14.27 秒,内联版本的结果是 4.45 秒。这很常见吗?我执行了该程序 10 次,结果总是相似的。你怎么看?

然后,使用选项 -O1 编译两个版本的结果相似,大约为 1.5 秒,所以我gcc 为我使用 O1 进行内联。

顺便说一句,我知道 gettimeofday 计算总时间,而不仅仅是程序本身使用的时间,而且我需要专门使用该功能。

提前致谢!

0 投票
2 回答
78 浏览

c - 强制 C 编译器不要内联数组中的条目

我有一个 C 函数指针数组:

在代码的其他地方(使用第三方工具),我在使用函数数组之前破坏了它的内容。所以,

应该导致不可定义的行为(甚至中止正在运行的程序)。但事实并非如此。结果就好像破坏从未发生过一样。

目前,我可以想象这种行为的两个错误来源:

  1. 破坏不会发生
  2. 编译器在编译时内联数组的内容,因此破坏没有效果。

到目前为止,第 3 方工具从未表现出不破坏它应该破坏的东西的行为。因此,我不得不假设后者。

如何防止编译器内联函数数组的内容?

0 投票
1 回答
1269 浏览

java - JVM 禁用特定类或方法的内联

我正在尝试编写一些基准来衡量内联方法的效果。有人知道是否可以在 HostSpot JVM 上禁用特定类或方法的内联?

我发现-XX:-Inline总共禁用了内联。

0 投票
1 回答
278 浏览

c++ - C++:“(静态常量双变量)不能出现在常量表达式中”

classA我有:

然后在classB

但是编译器一直告诉我:

'classB::const_var' 不能出现在常量表达式中。

为什么不?有趣的是,如果我classB::const_var从 a更改double为a int,错误就会消失。

我内联了这些变量以进行优化。我希望使用浮点数不会妨碍优化。

我在 Ubuntu 64 位环境中使用 GCC 5.4.0。我确定我使用 Qt4 的事实与此无关。

编辑:我最好的解决方法是classB

然后在classA(其他任何地方)分配const_var_int给我的浮点数。它摆脱了错误。我不知道这是否违背了目的或还有什么其他后果。

0 投票
2 回答
297 浏览

gcc - GCC 中的 Early inliner 和 IPA inliner 有什么区别?

阅读 GCC 代码注释和在线文档,似乎有两种类型的内联程序 - 早期内联程序和 IPA 内联程序。例如,在 gcc/ipa-fnsummary.c

/* 当针对 IPA 内联进行优化和分析时,初始化循环优化器,以便我们可以生成正确的内联提示。

在优化和分析早期内联时,初始化节点参数,以便我们可以生成正确的 BB 谓词。*/

这两种内联是什么?两者有什么区别?

0 投票
0 回答
25 浏览

java - 我在哪里可以找到 Java 源代码来为基于 Java 的提前编译器进行去虚拟化和内联基准测试?

我已经开发了整个全局优化,例如去虚拟化和内联,作为对 MobiVM 项目的贡献,该项目是 RoboVM 的一个分支,当它开始进行基准测试时,我现在在简单或小型应用程序中测试这种优化不会生效,因为内联和去虚拟化与程序中使用的虚拟调用的数量有关。我是否可以找到 java 源代码来做这样的 benchamrk 或如何编写这样的代码来证明我的优化的好处。