O sistema operacional em uma máquina está encarregado dos 50 megabytes de espaço de memória. O sistema operacional usa o espaço de diversas maneiras, como exemplificamos aqui:
![]() O sistema operacional e diversos aplicativos, juntamente com suas variáveis globais e espaços de pilha, consomem partes da memória. Quando um programa completa a execução, libera sua memória para ser reutilizada por outros programas. Observe que parte do espaço de memória permanece inutilizada em qualquer momento. |
Isto, obviamente, é uma idealização, porém os princípios básicos estão corretos. Como vocÊ pode ver, a memória contém o código executável para os diferentes aplicativos em execução na máquina, junto com o código executável do próprio sistema operacional. Cada aplicativo tem determinadas variáveis globais associadas a ele. Estas variáveis também consomem memória. Finalmente, cada aplicativo usa uma área da memória chamada pilha, que mantém todas as variáveis locais e parâmetros usados por qualquer função. A pilha também mantém a ordem de execução das funções, para que os retornos das funções ocorram corretamente. Sempre que uma função é executada, suas variáveis locais e parâmetros são "empurrados" sobre a pilha. Quando a função retorna, estes locais e parâmetros são "lidos e removidos". Por isso, o tamanho da pilha de um programa flutua constantemente conforme a execução do programa, mas tem um tamanho máximo.
Ao terminar a execução de um programa, o sistema operacional descarrega o programa, seus globais e seu espaço de pilha da memória. Um novo programa pode usar aquele espaço posteriormente. Desta forma, a memória em um sistema de computador é constantemente "reciclada" e reutilizada por programas, à medida que são executados e concluídos.
Em geral, cerca de 50% do espaço total de memória do computador pode estar ocioso em um dado momento. O sistema operacional possui e administra a memória não utilizada, coletivamente denominada de pilha. A pilha é extremamente importante, pois está disponível para aplicativos durante a execução usando as funções em C malloc (alocação de memória) e free. A pilha permite que programas aloquem a memória exatamente quando precisarem dela, durante a execução de um programa, em vez de pré-alocar a memória com uma declaração de matriz de tamanho específico.