Storage and memory data locations
Each variable declared and used within a contract has a data location. EVM provides the following four data structures for storing variables:
Storage
: This is global memory available to all functions within the contract. This storage is a 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 the 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
: EVM maintains a stack for loading variables and intermediate values for working with Ethereum instruction set. This is working set memory for EVM. A stack is 1,024 levels deep in EVM and if it store anything more than this it raises an exception.
The data location of a variable is dependent on the following two factors:
- Location...