问题标签 [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.
javascript - Javascript函数内联
我有以下函数,它将 3 个元素从一个类似数组的对象复制到另一个:
该函数每帧调用数万次。
几乎所有对它的调用都来自我代码中的一个地方。
如果我在该单个位置手动内联它,以便直接在调用者中完成集合,我的代码会变得更快,这意味着引擎没有内联它。
有没有办法确保 JS 引擎内联它?这显然是一个热门功能。是否有任何奇怪的注释,或者反之亦然一些不允许引擎内联函数的代码模式?
我有许多类似的函数,用于处理向量和矩阵,因此在所有地方开始手动内联会非常麻烦和丑陋。
templates - Idris 可以内联用作参数的函数吗?
在 C++ 中,如果您要编写自己的sort
带有比较谓词参数的通用函数模板,那么编译器将能够内联该谓词。
在 C: 中不是这种情况:qsort
被编译一次,并且它的比较谓词参数永远不会内联(也许编译器/链接器的最新技术水平最近有所改进,所以如果我的信息已过时,请纠正我)
这对 C++ 中的泛型编程(当然不仅仅是sort
函数)来说是一个福音:您可以获得相同的性能,而在 C 中,您必须放弃泛型(或使用宏)。
我的问题是:Idris 可以做 C++ 在这里做的事情吗?它可以内联用作参数的函数吗?
c++ - 允许在调试模式 Visual Studio 中内联特定标头
是否可以有一个构建设置,其中允许在调试构建中内联特定标头?我正在使用我在一个单独的项目中测试的信号/委托模式。我希望我的主项目在遇到断点时不要在调用堆栈中显示回调的信号/委托部分。是否可以在不优化主项目的情况下允许在仅标头库上内联函数,或者是否有其他方法可以从调用堆栈接口过滤对仅标头库的调用。
java - jvm +LogCompilation输出中“被调用者太大”的含义
所以在 +LogCompilation 的输出中有打印的消息
和
与特定方法相关联(以及编译器不内联的决定)。
但是“被调用者”不是方法本身吗?还有什么意思?如果是这样,“被调用者太大”和“太大”之间有什么区别-它们的意思不是一样吗(也许这只是一个遗留日志消息,2个工程师使用不同的语言来做同一件事?)
或者“被调用者”是否真的意味着“调用者”?
不内联的任何一个原因都是合法的。我有点不好意思,我不明白这一点。
c - 这种内联结果常见吗?
由于大学工作,我不得不研究一个简单的优化,即内联。
这是基本代码:
这是带有内联的代码:
使用选项 -O0 和 gcc 进行编译,基本版本的结果是 14.27 秒,内联版本的结果是 4.45 秒。这很常见吗?我执行了该程序 10 次,结果总是相似的。你怎么看?
然后,使用选项 -O1 编译两个版本的结果相似,大约为 1.5 秒,所以我想gcc 为我使用 O1 进行内联。
顺便说一句,我知道 gettimeofday 计算总时间,而不仅仅是程序本身使用的时间,而且我需要专门使用该功能。
提前致谢!
c - 强制 C 编译器不要内联数组中的条目
我有一个 C 函数指针数组:
在代码的其他地方(使用第三方工具),我在使用函数数组之前破坏了它的内容。所以,
应该导致不可定义的行为(甚至中止正在运行的程序)。但事实并非如此。结果就好像破坏从未发生过一样。
目前,我可以想象这种行为的两个错误来源:
- 破坏不会发生
- 编译器在编译时内联数组的内容,因此破坏没有效果。
到目前为止,第 3 方工具从未表现出不破坏它应该破坏的东西的行为。因此,我不得不假设后者。
如何防止编译器内联函数数组的内容?
java - JVM 禁用特定类或方法的内联
我正在尝试编写一些基准来衡量内联方法的效果。有人知道是否可以在 HostSpot JVM 上禁用特定类或方法的内联?
我发现-XX:-Inline
总共禁用了内联。
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
给我的浮点数。它摆脱了错误。我不知道这是否违背了目的或还有什么其他后果。
gcc - GCC 中的 Early inliner 和 IPA inliner 有什么区别?
阅读 GCC 代码注释和在线文档,似乎有两种类型的内联程序 - 早期内联程序和 IPA 内联程序。例如,在 gcc/ipa-fnsummary.c
/* 当针对 IPA 内联进行优化和分析时,初始化循环优化器,以便我们可以生成正确的内联提示。
在优化和分析早期内联时,初始化节点参数,以便我们可以生成正确的 BB 谓词。*/
这两种内联是什么?两者有什么区别?
java - 我在哪里可以找到 Java 源代码来为基于 Java 的提前编译器进行去虚拟化和内联基准测试?
我已经开发了整个全局优化,例如去虚拟化和内联,作为对 MobiVM 项目的贡献,该项目是 RoboVM 的一个分支,当它开始进行基准测试时,我现在在简单或小型应用程序中测试这种优化不会生效,因为内联和去虚拟化与程序中使用的虚拟调用的数量有关。我是否可以找到 java 源代码来做这样的 benchamrk 或如何编写这样的代码来证明我的优化的好处。