Uso da Memória em C (retirado do Capítulo 7 do livro "C programação: o guia prático para a programação eficiente" de Steven Holzner)

É importante entender o que se passa na memória durante a execução de um programa C. Poucas linguagens de alto nível dão tanta atenção quanto C à manutenção e ao gerenciamento da memória; por essa razão, é crucial para nós como programadores C sabermos o que está acontecendo com as nossas variáveis, como elas são alocadas (porque, quando elas são realocadas por um programa C, os dados originais são perdidos), e como alocarmos nós mesmos grandes seções de memória para nosso uso.

Em C, a memória é dividida em várias seções diferentes. Existe a área de código, onde residem as instruções do programa; essa área não é modificada quando um programa é executado. A área seguinte é a área de dados, que é por sua vez dividida em duas seções, uma para dados inicializados e outra para dados não-inicializados.

Além disso, é definida uma área no topo da memória disponível, e essa região se expande em direção à parte baixa da memória, à proporção que é preenchida. Essa área é denominada pilha, e C aloca espaço para a maioria das variáveis nessa região. A última área de memória está localizada na memória alocável, e pode crescer em tamanho exatamente como a pilha, exceto pelo fato de se expandir em direção à memória mais alta, e não para baixo, em direção à memória mais baixa. Na verdade, a própria linguagem C usualmente mantém a pilha por nós, mas a alocação e o uso da memória na área da memória alocável são de nossa responsabilidade. Existe uma variedade de rotinas de biblioteca, projetadas para alocar espaço de memória para nós na área de memória alocável; na verdade, uma delas já foi vista, a função malloc( ), que faz exatamente isso.