Does memory dynamically allocated (via Create and New) in Delphi automatically get unallocated when your program ends, or must that be done manually?

If so, then is there a procedure to get the current amount of free system memory? (I recall there being one in FreePascal..) I'd like to compare how much memory I'm chewing up and not releasing. ;)

Thanks!