C#/CIL:本机 int 类型
C#/CIL: type of native int
我正在编写一些工具来帮助验证在运行时发出的 IL。此验证的一部分涉及在发出 OpCodes 时维护 Stack<Type>
,以便未来使用这些堆栈元素的 OpCodes 可以被验证为使用正确的类型。但是,我对如何处理 ldind.i
操作码感到困惑。
Microsoft 文档指出:
The ldind.i instruction indirectly loads a native int value from the
specified address (of type native int, &, or *) onto the stack as a
native int.
在 C# 中,未定义本机 int,我对哪种类型最准确地表示此数据感到困惑。我如何确定它的大小,以及应该使用哪种 C# 类型来表示它?我担心它会因系统硬件而异。
在我看来,您最好查看 VES 的定义方式并使用专用枚举为堆栈上的类型建模,而不是使用 C# 可见类型。否则,当我们谈到浮点类型时,您会大吃一惊。
来自 MS 分区 I.pdf1,第 12.1 节:
The CLI model uses an evaluation stack [...] However, the CLI supports only a subset of these types in its operations upon values stored on its evaluation stack—int32
, int64
, and native int
. In addition, the CLI supports an internal data type to represent floating-point values on the internal evaluation stack. The size of the internal data type is implementation-dependent.
因此,那些以及参考之类的东西是您应该跟踪的东西,我建议您使用 its 术语使用 VES 堆栈的显式模型来进行跟踪.
我正在编写一些工具来帮助验证在运行时发出的 IL。此验证的一部分涉及在发出 OpCodes 时维护 Stack<Type>
,以便未来使用这些堆栈元素的 OpCodes 可以被验证为使用正确的类型。但是,我对如何处理 ldind.i
操作码感到困惑。
Microsoft 文档指出:
The ldind.i instruction indirectly loads a native int value from the specified address (of type native int, &, or *) onto the stack as a native int.
在 C# 中,未定义本机 int,我对哪种类型最准确地表示此数据感到困惑。我如何确定它的大小,以及应该使用哪种 C# 类型来表示它?我担心它会因系统硬件而异。
在我看来,您最好查看 VES 的定义方式并使用专用枚举为堆栈上的类型建模,而不是使用 C# 可见类型。否则,当我们谈到浮点类型时,您会大吃一惊。
来自 MS 分区 I.pdf1,第 12.1 节:
The CLI model uses an evaluation stack [...] However, the CLI supports only a subset of these types in its operations upon values stored on its evaluation stack—
int32
,int64
, andnative int
. In addition, the CLI supports an internal data type to represent floating-point values on the internal evaluation stack. The size of the internal data type is implementation-dependent.
因此,那些以及参考之类的东西是您应该跟踪的东西,我建议您使用 its 术语使用 VES 堆栈的显式模型来进行跟踪.