Evaluation Stack
Added 31 Jul 2008
The evaluation stack can be considered as the
normal machine stack, the stack used to store information just before
the execution of a statement. We know that the information is stored in
the memory when we have to perform some operation on them. Same as we
move values to the registers in assembly language before invoking some
instruction/interrupt. In the same way we have to move the information
(a string in the case of our above example) to the stack before
processing (output to screen in above case) that. In the start of our
method main (figure 1.1), we notified the runtime of .NET that we are
in need to store some information during the course of our method. We
said that we will move only one value to stack at one time using maxstack directive. Hence if we write our directive as .maxstack 3,
then runtime will create a room of three values in the stack which we
can use at any time. Note that it doesn't mean that we can load only
three values in the stack in the life of our method, but it means that
we can move maximum three values at one time. Since values are removed
from the stack when processing finishes. It should also be noted that
whenever the function is called (invoked), the value used in the
function are removed from the stack and stack space is emptied. That is
how the Garbage Collector works in .NET. Also, there is no limitation
that we can move certain type of data to the stack. We can move any
kind of data (like string, integer, objects etc) to stack at any time.
Let's take another example which will clear the evaluation stack concept to us.
//Add.il