求值栈是MSIL中非常重要的一种数据结构,它能将你的应用程序和内存联系起来。它看起来很像栈帧(传统函数调用),但是它和栈帧又有很大的差异。可以将求值栈理解为应用程序的视图,你可以通过它看到函数的参数、本地变量、临时变量等信息。在传统的程序中函数的参数是被分配到栈上的(栈空间是编译时分配好的),但是在.NET里面函数的参数是被分配到一个为函数的参数以及本地变量保留的独立存储区(函数的参数区域和局部变量区域)。程序将不能直接访问这个存储区域,如果要访问这些参数和本地变量则必须使用命令load将他们从内存中移动到求值栈的槽上面。同时,你可以通过store命令来更新这些参数或本地变量的内容,求值栈上每个槽的大小是4字节或者8字节。既然是栈那么必然有栈的特点,求值栈也是一个后继先出的存储结构,同时为了函数调用的后栈的平衡性,在函数开始调用前,求值栈是空的,函数调用结束返回结果后,求值栈还是空的。这一点和传统的栈帧是一样的。
MSIL中的求值栈是什么
最新推荐文章于 2022-05-10 22:01:57 发布