A alocação pode ser:
Estática: criada programa é compilado. o Sistema operacional o lê e cria um processo, programa em execução, recebendo um espaço na memória. Para alocação estática, o compilador deve saber o total de memória livre, mandar esta informação para o SO ele criar um segmento de dados.
Alocação Dinâmica: permite Swapping. Os objetos alocados dinamicamente podem ser criados e liberados a qualquer momento, em qualquer ordem. A memória dinâmica para objetos é heap. Em linguagem C, organização do heap é lista encadeada de blocos livres, o que causa fragmentação dos blocos. Em linguagens com gerenciamento automático (Java), heap depende da parte do sistema que faz esse gerenciamento - garbage collection.
Fragmentacao pode ser
Interna: quando o processo não ocupa todos blocos de memória (páginas) reservados quando o tamanho do processo não é um múltiplo do tamanho da página de memória.
Externa: lacunas cada vez menores de espaços entre as páginas quando os programas terminam. Quando estes espaços sao pequenos demais para alocarem um processo, ficam inutilizados.