求值棧是MSIL中非常重要的一種數據結構,它能將你的應用程序和內存聯系起來。它看起來很像棧幀(傳統函數調用),但是它和棧幀又有很大的差異。可以將求值棧理解為應用程序的視圖,你可以通過它看到函數的參數、本地變量、臨時變量等信息。在傳統的程序中函數的參數是被分配到棧上的(棧空間是編譯時分配好的),但是在.NET裡面函數的參數是被分配到一個為函數的參數以及本地變量保留的獨立存儲區(函數的參數區域和局部變量區域)。程序將不能直接訪問這個存儲區域,如果要訪問這些參數和本地變量則必須使用命令load將他們從內存中移動到求值棧的槽上面。同時,你可以通過store命令來更新這些參數或本地變量的內容,求值棧上每個槽的大小是4字節或者8字節。既然是棧那麼必然有棧的特點,求值棧也是一個後繼先出的存儲結構,同時為了函數調用的後棧的平衡性,在函數開始調用前,求值棧是空的,函數調用結束返回結果後,求值棧還是空的。這一點和傳統的棧幀是一樣的。