问题标签 [inline-method]
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 - 方法内联优化会导致竞争条件吗?
正如在这个问题中看到的那样: 使用扩展方法引发 C# 事件 - 是不是很糟糕?
我正在考虑使用这种扩展方法来安全地引发事件:
但是 Mike Rosenblum 在 Jon Skeet 的回答中提出了这种担忧:
你们需要将 [MethodImpl(MethodImplOptions.NoInlining)] 属性添加到这些扩展方法中,否则 JITter 可能会优化您将委托复制到临时变量的尝试,从而允许出现空引用异常。
我在 Release 模式下进行了一些测试,以查看当扩展方法未使用 NoInlining 标记时是否可以获得竞争条件:
我在发布模式下运行了一段时间的测试,但从未出现过 NullReferenceException。
那么,Mike Rosenblum 在他的评论和方法内联不能导致竞争条件中是错误的吗?
事实上,我想真正的问题是,SaifeRaise 是否会被内联为:
或者
c# - 为什么 c# 不能使用内联匿名 lambda 或委托?
我希望我的问题标题措辞恰当。
在 c# 中,我可以使用 lambdas(作为委托)或旧的委托语法来执行此操作:
那么为什么我不能“内联” lambda 或委托主体,并避免在命名变量中捕获它(使其匿名)?
一个适用于 javascript 的示例(仅用于比较)是:
这会产生预期的警报框。
更新:如果你适当地转换,你似乎可以在 C# 中使用内联匿名 lambda,但是 () 的数量开始使它变得不守规矩。
也许编译器无法推断匿名委托的信号来知道您要调用哪个 Console.WriteLine() ?有谁知道为什么需要这个特定的演员表?
c++ - 如何避免使用内联函数重复代码?
我的工作中有重复的代码,我想摆脱它,所以我知道在 C++ 中使用宏不是一个好主意,但我必须使用内联函数,将此函数用作内联是个好主意:
我认为这个功能非常不安全。如何改进我的代码?
c++ - inline functions in c++
here is a small question about inline functions in c++.
At what stage of the compilation in C++ are the inline functions actually inlined at the call?
how does that basically work.
lets say if the compiler has decided that a particualr function has to be inline after the programmer has requested with an inline keyword in front of the function ,when does the compiler does that for the programmer .i mean at what stage of the compilation.
is it at the preprocessing stage like in c macros are expanded?
c++ - 内联构造函数?解释这种行为[C++]
考虑这段代码
这里一切都很好!
现在我做这个修改。我将 Dummy 的声明移至“dummy.h”。
并在“dummy.cpp”中定义构造函数 Dummy() 如下
最后,我的主文件为:
它编译得很好,但我收到一个链接器错误,抱怨对 Dummy::Dummy() 的未定义引用。
任何见解。
--
c++ - 具有相同 if 语句的 C++ 内联方法
我正在为 OpenGL 纹理编写处理程序,并且正在考虑安全性和性能。哪个级别的优化应该删除标记的 if 语句?
c++ - C++ template and inline
When I'm writing a simple (non-template) class, if the function implementation is provided "right in place", it's automatically treated as inline
.
What about this rule when talking about template-based classes?
Also, how is the inline
rule applied to non-nested template functions, like
What would happen in the first and in the second case here?
Thank you.
c# - 如何使用条件执行快速内联方法?
这就是我想做的:
那可能吗?
c++ - 内联运算符好吗?
运算符和其他在 C++ 中进行内联的方法之间有什么区别吗?我已经搜索过了,但正如我所见,这不是一个常见的问题。有没有人有充分的理由使用或避免使用它?注意:显然,我指的是小的内联运算符。
c++ - 现代 C++ 中的内联方法和代码可读性
好吧,所以有时我的“编码大脑”会跳过一个齿轮;偶尔你会听到齿轮磨擦的声音。(例如,每隔一段时间我都会class Foo : Bar {}
在提醒自己这不再合适之前写信——而且已经很久没有这样做了)。
我目前的 MO 是使用内联方法作为一种在不牺牲速度的情况下提高代码易读性和可维护性的方法,但我最近遇到了一个问题,这让我质疑这种做法。
因此,给定(公认的人为)代码,例如:
我会写:
我现在正在研究的数学相当复杂。如果我想要一个通用的 CS/CE 能够维护它,它必须写得更像第二个。该代码对时间也很敏感。
正如我上面所说,我最近遇到了一个问题。我让我的数学常数static const double ...
像一个优秀的小程序员;但是当试图内联访问它们时,编译器会为 DLL 炸毁。目标操作系统是 Linux,但我正在 Windows (Visual Studio 2013) 上开发,并希望保持“跨平台安全”。
解决这个小问题的方法是让它们脱节;但是,这会影响我的表现吗?鉴于所涉及的深奥数学,可读性是一个严重的问题。但它仍然必须表现良好。
更新:
为了澄清,使用更多/不同 - 并且更加人为的 - 代码:
此代码在两个平台上的静态中都可以正常工作;它将作为 Linux 上的共享库工作。在 Windows 下尝试将其用作 DLL 时会出错。唯一的解决方案是将CheckValue
方法移出线外。
“老派”在调用它的地方“按原样”替换inline
了方法的代码;CheckValue
显然“新学校”内联确实......什么都没有?(因为编译器显然会做它想做的事。)
AFIK 在 DLL 下使这项工作的唯一方法是移CheckValue
出线......这对于时间敏感的代码“老派”来说可能是一个问题(每次调用都是/被保证的函数开销)。这仍然是一个问题吗?有没有“更好”的方法来保持可读性?例如,不要假设每个在我的代码上工作的 CS/CE 都会精通统计?
注意:这是跨平台的,因此“编译器”可能不是一个有意义的短语。