Objects can be put on and removed only from the top of a stack. But what about reading and writing their values? Please correct me if I’m wrong, but I think process must be able to read from any part of the stack, since if only reading from the top was possible it would have to remove (and store somewhere) whole content of the stack above a variable it wants to examine. But in that case, how does the process know where exactly in the stack is a particular variable? I suspect it just holds a pointer to it, but where is that pointer stored?
Another thing – reading about stacks I often find phrases like “All memory allocated on the stack is known at compile time.” Well, I probably misunderstand this, so please tell me where’s the flaw in my logic:
Suppose a local variable is created when an if() statement is true, and isn’t when it’s false. Whether it’s true will turn out at run time. So at compile time there’s no way to know if it should be created, hence I wouldn’t think memory for it is allocated at all, as it would be wasteful. Consequently, it isn’t created/known at compile time.
At compile time, it’s known how much space each type needs: An Integer, for instance, is 4 Bytes wide on 32 bit platforms, and a class with 2 Integers consumes 8 Bytes. Whether this space is allocated for a specific variable is not necessarily known (may depend on an
if, as you stated).When you invoke a method, all parameters and the return address are pushed onto the stack. To get one parameter, you walk up the stack up to its position, which is computed by the base pointer and the size of each parameter.
So it is not entirely true for this stack that you can access the top element only. It is, however, for the Stack data structure.