不,只有一个堆栈.有些语言区分了eval堆栈和返回堆栈.该Forth语言跳到介意作为主要例如,在微型处理器的初期相当的影响力.而且非常基于堆栈的语言语法,对程序非常不友好.但是,易于实现,它不需要超过2千字节的代码.大致你的Linq查询理解需要:)
但不,MSIL 不是其中之一.VM(虚拟机)仅为方法定义一个堆栈.它完全是类型无关的,它可以存储一个int或double或一个对象引用或一个具有相同aplomb的方法返回地址.向堆栈推送值或从堆栈弹出值只是一种逻辑操作,根本不对实际数据传输进行建模.
将抖动转换为处理实际数据的机器代码是抖动的工作.事实并非如此,处理器也有堆栈,就像VM一样.它还可以存储各种不同的数据类型,但当然不能忽略数据大小.最重要的是,消除了那种推送和弹出并利用处理器的注册表库,完全没有在MSIL中建模.也不是巧合,不同的处理器具有非常不同的注册银行功能. 使代码快速非常重要.
是的,每个线程都有自己的堆栈.绝对必要,堆栈存储方法返回地址,线程可以执行不同的代码.在MSIL和机器代码中都有.
基本上,CIL 的评估堆栈是您使用 CIL 指令操作的内容,实际的每线程运行时堆栈是您通过机器代码(汇编)指令操作的内容。
CIL 堆栈在运行时并不真正存在,因为它是 CLI 规范定义的虚拟机的一部分。
CLR JIT 编译器所做的是获取使用 CIL 堆栈的 CIL 代码,并将其转换为使用实际运行时堆栈的机器代码(特定于您的体系结构,如 x86 或 ARM)。