As already discussed, the heap is typically used for complex types. The stack frame model can still be used, but it will need modifying, as the stack will need to point to the base address of the complex type on the heap.
Let's construct a stack frame for the following piece of code:
fn main() { let f = 42; let my_ids: Vec<i64> = Vec::with_capacity(5); }
Function name |
Address |
Variable name |
Value |
main |
1 |
f |
42 |
0 |
my_ids |
(an instance of Vector) |
Space is allocated correctly for f, but my_ids is different; it is a Vector<i64> with pre-allocated space for five i64s values. While the vector itself is stored in the stack, its contents are allocated in the heap.
Values in the heap are considered to be more persistent than those in the stack. That means, unlike values in...