Reserving memory for specific purposes. At startup, operating systems and applications reserve fixed amounts of memory (RAM) and may allocate more as needed. Although a virtual memory function simulates an almost unlimited amount of memory, there is always a certain amount of "real" memory needed to run the program. See virtual memory
Allocate and Release
Depending on the language, programmers have to specifically release memory that is no longer used. This is tedious and error prone because it is easy to forget to deallocate, causing unused memory to remain until the program is closed. For example, Java and the .NET environment perform "garbage collection" and release memory automatically. C and C++ do not.
Memory is also allocated for a disk cache by the operating system and may be configurable by the user. A disk cache retains large chunks of data from storage in faster RAM. However, a large disk cache that speeds up one application may slow down another because there is less RAM available. See cache
Awful in the Days of DOS
On PCs before DOS 6, memory management was a mess. Users were expected to allocate the right mix of expanded memory (EMS) and extended memory, causing third-party memory managers such as QEMM and 386MAX to become popular because they did it automatically. See PC memory management