gpt4 book ai didi

.net - 如何在 CIL 中的堆栈上处理不同的类型

转载 作者:行者123 更新时间:2023-12-04 16:52:55 26 4
gpt4 key购买 nike

尝试使用 ildasm 深入研究 CIL 代码,很明显 CIL 本身正在基于堆栈工作以支持如下表达式

IL_0001:    ldc.i4.s 13     ; 1f 0d
IL_0003: stloc.0 ; 0a
IL_0004: ldc.i4.s 31 ; 1f 1f
IL_0006: stloc.1 ; 0b
IL_0007: ldloc.0 ; 06
IL_0008: ldloc.1 ; 07
IL_0009: add ; 58

float32 做同样的事情而不是 int32通过使用 ldc.r4 <num>调用 add没有区别因此让我想知道是否有不同类型的不同堆栈,或者是否只有一个堆栈包含特定元素在堆栈上的类型的元数据。是否有关于 ECMA-335 或其他地方的具体实现的任何信息?

最佳答案

这在第 I 部分第 12 部分(例如来自此 pdf )中专门解决,其中讨论了虚拟执行系统(VES):

As described below, CIL instructions do not specify their operand types. Instead, the CLI keeps track of operand types based on data flow and aided by a stack consistency requirement described below. For example, the single add instruction will add two integers or two floats from the stack.



和:

Most CIL instructions that deal with numbers take their operands from the evaluation stack (see §I.12.3.2.1), and these inputs have an associated type that is known to the VES. As a result, a single operation like add can have inputs of any numeric data type, although not all instructions can deal with all combinations of operand types.



在 I.12.1.4 中也进行了相当多的详细说明。

关于.net - 如何在 CIL 中的堆栈上处理不同的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23995302/

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