Let's start at the beginning
In Chapter 2, Variables, I briefly mentioned how data is stored within memory, and I said that non-compound types, such as i32
, are stored on the stack, whereas, the likes of String
, Vector<T>
, types, and such are stored on the heap.
By default, Rust stores data on the stack, as it's incredibly fast. There are drawbacks though. The stack is limited in size and the allocation only lasts for the lifetime of the function.
The question is, how much memory does a function take?
The stack frame
The stack frame is a term you may have come across. It is the amount of memory allocated to a function, which is used to store all of the local variables and function parameters. In the following snippet, the stack frame will be large enough to store the two int
values and the single float32
type:
fn main() { let a = 10; let b = 20; let pi = 3.14f32; }
Once main
has exited, the stack frame allocated on entry will be released. The beauty...