Storage and memory data locations
Each variable declared and used within a contract has a data location. The EVM provides the following four data structures for storing variables:
- Storage: This is global memory available to all functions within a contract. This storage is permanent storage that Ethereum stores on every node within its environment.
- Memory: This is local memory available to every function within a contract. This is short-lived and fleeting memory that gets torn down when a function completes its execution.
- Calldata: This is where all incoming function execution data, including function arguments, is stored. This is a non-modifiable memory location.
- Stack: The EVM maintains a stack for loading variables and intermediate values for working with the Ethereum instruction set. This is the working set memory for the EVM. A stack is 1,024 levels deep in the EVM, and if it stores anything more than this, it raises an exception.
The data location of...