The heap is a much larger memory part than the stack, so it is important that memory locations are freed as soon as they are no longer needed. The Rust compiler sees when a variable ends its lifetime (or in other words, goes out of scope) and inserts a code at compile time to free its memory when the code is executed. This behavior is unique to Rust and is not present in other commonly used languages.