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.

1.1 Importância da Gestão de Memória

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.

1.2 Organização da Memória durante a Execução

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.

1.3 Stack (Pilha de Execuçã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.