Up until the mid-1990s, the majority of programming languages used in industry supported manual memory management, though garbage collection has existed since 1959, when it was introduced with Lisp.
In manual memory allocation, this is also specified manually by the programmer; via functions such as free() in C, or the delete operator in C++ – this contrasts with automatic destruction of objects held in automatic variables, notably (non-static) local variables of functions, which are destroyed at the end of their scope in C and C++.
Programmers are expected to invoke dispose() manually as appropriate to prevent "leaking" of scarce graphics resources.
Many advocates of manual memory management argue that it affords superior performance when compared to automatic techniques such as garbage collection.
[citation needed] Manual allocation is also known to be more appropriate for systems where memory is a scarce resource, due to faster reclamation.
This is especially an issue in real time systems, where unbounded collection cycles are generally unacceptable; real-time garbage collection is possible by pausing the garbage collector, while real-time manual memory management requires avoiding large deallocations, or manually pausing deallocation.