问题标签 [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.
.net - .NET JIT 会内联一个调用另一个小函数的小函数吗?
我想知道 - .NET JITter 会递归内联从其他小函数调用的小函数吗?
举个例子:
如果我Cube
从某个地方调用,它会一直内联,还是会以函数调用结束Square
?
并且,如果是这样,内联将递归多深?(假设我很疯狂地以同样的方式实现 a Quartic
orQuintic
函数。)
c# - 在 C# 中内联 CSS
我需要从 c# 中的样式表中内联 css。
就像这是如何工作的。
http://www.mailchimp.com/labs/inlinecss.php
CSS 很简单,只有类,没有花哨的选择器。
我正在考虑使用正则表达式(?<rule>(?<selector>[^{}]+){(?<style>[^{}]+)})+
从 css 中删除规则,然后尝试在调用类的位置进行简单的字符串替换,但是一些 html 元素已经有一个样式标签,所以我必须考虑到这一点好。
有没有更简单的方法?或者已经用c#编写的东西?
更新 - 2010 年 9 月 16 日
只要您的 html 也是有效的 xml,我就能够想出一个简单的 CSS 内联器。它使用正则表达式来获取<style />
元素中的所有样式。然后将 css 选择器转换为 xpath 表达式,并在任何预先存在的内联样式之前将样式内联添加到匹配元素。
请注意,CssToXpath 没有完全实现,有些事情它还不能做......
CssInliner.cs
CssToXpath.cs
还有一些测试
还有更多测试,但是,它们为输入和预期输出导入 html 文件,我没有发布所有这些!
但我应该发布规范化扩展方法!
.net - 什么时候有资格被 CLR 内联的方法?
我在应用程序中观察到很多“堆栈内省”代码,这些代码通常隐含地依赖于它们的包含方法,而不是为了它们的正确性而内联。此类方法通常涉及调用:
MethodBase.GetCurrentMethod
Assembly.GetCallingAssembly
Assembly.GetExecutingAssembly
现在,我发现围绕这些方法的信息非常混乱。我听说运行时不会内联调用 GetCurrentMethod 的方法,但我找不到任何相关文档。我曾多次在 StackOverflow 上看到过帖子,例如这个,表明 CLR 没有内联跨汇编调用,但GetCallingAssembly
文档强烈表明并非如此。
还有饱受诟病的[MethodImpl(MethodImplOptions.NoInlining)]
,但我不确定 CLR 是否认为这是“请求”或“命令”。
请注意,我从合同的角度询问内联资格,而不是关于 JITter 的当前实现何时因实施困难而拒绝考虑方法,或者 JITter在评估交易后最终最终选择内联合格方法的时间 -关闭。我读过这个和这个,但他们似乎更关注最后两点(有提到 MethodImpOptions.NoInlining 和“exotic IL instructions”,但这些似乎是作为启发式而不是作为义务提出的)。
什么时候允许CLR内联?
c++ - 表达式模板未完全内联
我已经完成了数学库的第一个版本,下一步我想转向表达式模板来提高代码的性能。但是,我最初的结果与我的预期不同。我在 MSVC 2010 中以 vanilla Release 模式编译(并且可以使用 C++0x)。
为我将向您展示的大量代码提前道歉,它是我能做到的尽可能少,同时让人们看看我在做什么。分析框架:
表达模板向量:
手动内联:
结果:
表达式模板:
总时间:14.172 平均时间:0.29525
分钟:0.281 最大:0.422手动内联:
总时间:8.438 平均时间:0.175792
分钟:0.171 最大:0.188
如您所见,表达式模板(显然)没有变成完全内联的代码。这是test()
最后一次调用的 ,的反汇编std::clock()
:
表达式模板组装:
手动内联组装:
结论:无论出于何种原因,MSVC2010 都不会内联调用operator+
. 有人知道这是为什么吗?即使 put __forceinline
(我想避免)也不会内联。
更新:正如jdv-Jan de Vaan 提到的,当我删除析构函数时:
它内联operator+
。奇怪的是,它将它内联到不同的程序集,我的测试表明这个输出虽然比我原来的性能好,但仍然没有达到与手动内联版本相同的状态。任何想法为什么会这样?
haskell - IO动作中纯表达式的重复求值
我有一个过程,(a)执行一些 IO,(b)构造一个查找表,(c)返回一个使用查找表的 IO 操作。但是当使用 编译时-O
,GHC(版本 6.12.1)内联构造查找表,以便每次调用 IO 操作时都会重新评估它。
例子:
这个问题是否广为人知,可以有一个标准的 GHC 万无一失的解决方法 - 或者您将如何调整程序以便a
不会重复分配?
c# - Is it possible that code of method from a referenced dll gets inlined in my own code?
A while ago I've read something about 'inlining'. The .Net compiler will inject code (inline) from small methods to make execution quicker.
Is it possible that code of method from a referenced dll gets inlined in my own code?
c# - 防止方法上的 JIT 内联
我有一种独特的情况。我一直在开发一个用于发送电子邮件的开源库。在这个库中,我需要一种可靠的方法来获取调用方法。我StackTrace
通过分析其中的StackFrame
对象来完成此操作。这在关闭优化的调试模式项目中没有问题。
当我切换到打开优化的发布模式时会出现问题。堆栈跟踪如下所示:
这取自失败的单元测试。在此跟踪的第 3 行中,我应该看到一个TestEmail
在其他地方定义的名为的方法,但我相信 JITter 正在内联它。我读过你可以通过使方法虚拟来防止内联,但这不起作用。有谁知道防止方法内联的可靠方法,因此您的方法将显示在堆栈跟踪中?
c++ - C/C++ 编译器有什么办法可以内联 C 回调函数吗?
给定一个像 C-Stdlib 这样将 C-Functionpointer 作为回调的典型函数,qsort()
任何编译器都可以使用内联优化代码吗?我认为不可能,这是正确的吗?
好的,qsort()
是来自外部库的函数,但我认为即使LTO也无济于事,对吧?
但是,如果我my_qsort()
在同一个编译单元中定义,那么编译器是否可以内联?
这有什么区别吗?我认为使用C 函数指针作为回调是阻止编译器内联的因素。正确的?
(我只是想确保我理解为什么我应该在 C++ 中使用Functor )
c++ - 在编译时复制 C/C++ 函数
如果我有一个 function A()
,我有兴趣找到一种方便的方法来创建一个B()
与 具有完全相同功能的函数A()
,只是名称不同。新功能将是一次性使用。目的是在一个有点原始的采样分析器中区分对同一函数的调用,并且复制的函数将仅在此上下文中使用。也就是说,它永远不会接触生产代码,只用于修补。
首先猜测是一个宏,它声明了一个名为的函数B
并在其中创建了一个内联调用A()
。这里的问题是我不知道 GCC 中有一种方法可以强制任意函数调用内联;似乎所有内联选项都用于函数声明而不是调用。
使用模板可能有一些深奥的方法,或者可能通过欺骗编译器进行内联。我不确定这是否可能。有什么想法吗?不幸的是,新的 C++ 标准不可用,如果它会有所作为的话。
optimization - 是否所有 lambda 参数都自动内联在 F# 中
F# News 的这篇文章指出 F# 可以内联作为参数传递的函数。总是这样吗?它会自动发生吗?