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 堆栈的显式模型来进行跟踪.


1ECMA C# and Common Language Infrastructure Standards