Quando declaramos variáveis e arrays em um programa, estamos utilizando a memória do computador para armazenar as informações necessárias à execução. Cada função — incluindo a função main — utiliza uma região específica da memória para armazenar seus dados e controlar sua execução.
A forma como essa memória é organizada e utilizada é um aspecto fundamental no desenvolvimento de programas, especialmente na linguagem C, onde o controle sobre os recursos é mais explícito.
O gerenciamento adequado da memória é essencial por diversos motivos:
Além disso, um problema recorrente em aplicações é o chamado vazamento de memória (memory leak), que ocorre quando uma região de memória continua alocada mesmo não sendo mais utilizada pelo programa. Esse tipo de situação reduz a memória disponível e pode comprometer futuras operações.
Durante a execução de um programa, a memória é organizada em diferentes regiões, cada uma com características específicas. Entre essas regiões, destacam-se:
Nesta seção, será analisado inicialmente o funcionamento da stack, que é a base para compreender o comportamento das variáveis e das chamadas de função.
Considere o seguinte programa:
#include <stdio.h>
int main() {
int numero;
char letra;
int vetorzitcho[3] = {0};
scanf("%d", &numero);
printf("Esse programa é simples.\n");
printf("%d\n", numero);
return 0;
}
Quando esse programa é executado, uma região de memória específica é criada para a função main. Essa região é chamada de stack (ou pilha de execução).
A stack é uma área de memória sequencial, cujo tamanho é definido pelo sistema operacional ou pelo compilador. Em muitos sistemas, seu tamanho varia entre aproximadamente 1 MB e 8 MB, embora esse valor possa ser configurado.
As variáveis declaradas dentro da função — como numero, letra e vetorzitcho — são armazenadas nessa região.