gpt4 book ai didi

.net - 我们可以构造一个 `OpCode` 的实例吗?

转载 作者:行者123 更新时间:2023-12-01 22:53:27 25 4
gpt4 key购买 nike

.NET Framework 4.0 向 Reflection API 引入了多项内容,这些内容对我的工作从极其有用到至关重要。其中包括 AssemblyModuleMethodBodyLocalVariableInfo 的 protected 构造函数以及新的 CustomAttributeData 类。有几件我仍然需要的东西解决起来相当麻烦。我相信它们很容易适用于需要扩展我刚刚列出的类型的同一[小]群体。

这一次:我正在寻找一种方法来构造 System.Reflection.Emit.OpCode 的实例。用我自己的参数构造。我当前调用内部构造函数来创建实例。这不会影响性能,因为我将构造的项公开为类的 public static readonly 成员以供重用,但正如您可以想象的那样,这是一个极其次优的场景。

是否有任何原因无法通过说明用户构造的 OpCode 不能与 ILGenerator 一起使用的文档来公开当前的内部 OpCode 构造函数.

编辑:这是一个示例。通过创建以下自定义操作码,我可以在一些中间指令列表之间的字节码转换中使用它,而无需创建临时局部变量。如果我发出 IL,我会将剩余的 swap 指令转换为有效的 IL 表示形式,但就我而言,下一步是理解自定义 swap 指令的 JIT 。我使用的是 Prefix2 前缀 0xFD,该前缀被任何有效的 IL 操作码保留和使用。

/// <summary>
/// Swaps adjacent elements on the evaluation stack. The supplied inline int32 argument gives the
/// index of the topmost item in the pair.
/// </summary>
public static readonly OpCode Swap;

我还将将此用于 JIT 内在函数,这些内在函数没有简单/通用的托管代码表示,但在各种 native 代码生成器中具有简单的依赖于平台的表示。其中之一是 ldthread(加载对当前托管线程的 RuntimeThread 表示形式的引用)。

最佳答案

我认为不可能创建自定义 OpCode 实例,因为 OpCode 实例严格源自 Common Language Infrastructure (CLI) documentation 。因此,即使您的情况有意义,OpCode 似乎也不是正确的选择。

关于.net - 我们可以构造一个 `OpCode` 的实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1285703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com