It might be worth adding that functions apparently don't free up memory on exit the same way unset does..
Maybe this is common knowledge, but although functions destroys variables on exit, it (apparently) doesn't help the memory.
So if you use huge variables inside functions, be sure to unset them if you can before returning from the function.