Reserving memory moment to moment, as needed, without having to reserve a fixed amount ahead of time. Modern operating systems perform dynamic memory allocation for their own use. They may also perform the same operation for their applications, or they may include programming interface functions (APIs) that allow the applications to allocate and de-allocate memory as needed. See garbage collection.
If the programmer is restricted to a language that does not allow for dynamic memory allocation (as I was restricted to Fortran in 1965-75), then he or she must inevitably make the program data-dependent, thus vitiating the essential distinction between program and data.