Difference between revisions of "Stack"
m (→Stack overflow) |
m |
||
Line 1: | Line 1: | ||
A stack is a memory area used to store and retrieve information in LIFO (last in, first out) order. |
A stack is a memory area used to store and retrieve information in LIFO (last in, first out) order. |
||
− | It is very commonly used in |
+ | It is very commonly used; basically in almost every computer system and almost every program. |
==Basic operations== |
==Basic operations== |
||
− | There are basically only |
+ | There are basically only two operations performed on a stack: |
* Push - Adding information to the stack |
* Push - Adding information to the stack |
||
* Pop - Removing information from stack |
* Pop - Removing information from stack |
||
A stack needs a stack pointer (SP), which typically points to the last item pushed onto the stack. |
A stack needs a stack pointer (SP), which typically points to the last item pushed onto the stack. |
||
− | Hardware stacks, used for program execution (that contain return addresses and activation frames |
+ | Hardware stacks, used for program execution (that contain return addresses and activation frames), typically grow |
downward from high memory to low memory. Pushing a 32-bit value onto a stack will decrement the stack pointer |
downward from high memory to low memory. Pushing a 32-bit value onto a stack will decrement the stack pointer |
||
by 4, whereas popping a 32-bit value does the opposite and increments the stack pointer by 4. |
by 4, whereas popping a 32-bit value does the opposite and increments the stack pointer by 4. |
Revision as of 15:56, 24 June 2019
A stack is a memory area used to store and retrieve information in LIFO (last in, first out) order. It is very commonly used; basically in almost every computer system and almost every program.
Basic operations
There are basically only two operations performed on a stack:
- Push - Adding information to the stack
- Pop - Removing information from stack
A stack needs a stack pointer (SP), which typically points to the last item pushed onto the stack. Hardware stacks, used for program execution (that contain return addresses and activation frames), typically grow downward from high memory to low memory. Pushing a 32-bit value onto a stack will decrement the stack pointer by 4, whereas popping a 32-bit value does the opposite and increments the stack pointer by 4.
Stack overflow
One problem that is hard to control and avoid is stack overflow. It happens when the application has pushed more data onto the stack than it can store, thereby overwriting other data areas or writing onto areas that are not data. In any case, the effects will usually create problems when program execution continues, very likely a crash of the program. This is a especially problematic in smaller Embedded Systems, which do not have a memory management unit (MMU) or memory protection unit (MPU) to control the access to the stack.