Allowing a process to change the amount of memory available to it dynamically is highly desirable. For example, a process such as a compiler then need use no more memory than is required by the input of a particular run, and a process such as a sort utility can use as much (or as little) memory as is available during a particular run.
However, to be implemented efficiently, dynamic memory allocation requires memory management hardware that allows the virtual processor to access a potentially large number of disjoint segments of real memory. Furthermore, it complicates both the operating system resource allocation policies and the code of the dynamically sized processes, since the amount of memory needed by a process is not known in advance and it may be impossible to grant a request for extra memory.
These difficulties can be ameliorated effectively be requiring the linker to supply the loader (via parameters in the process image) with the maximum amount of extra memory a process may request, as well as the minimum amount of extra memory the operating system must guarantee. These parameters allow particular implementations of an operating system to overcome limitations of the memory management hardware by pre-allocating or partially pre-allocating extra memory for a process when it is created. They also facilitate the writing of dynamically sized processes as a minimum amount of memory can be guaranteed to be dynamically allocatable.