Skip to main content

Memory | Python

  • Memory | Python

alt text


Segmento de Código (Texto)

  • O que é: Contém as instruções executáveis do programa (o código compilado).
  • Função: Armazena as instruções que a CPU irá executar.
  • Características:
    • É normalmente somente leitura para evitar alterações acidentais.
    • Pode ser compartilhado entre processos que usam o mesmo programa, economizando memória.

Segmento Estático/Global

  • O que é: Armazena variáveis globais e estáticas.
  • Função: Contém variáveis que permanecem alocadas durante toda a execução do programa.
  • Características:
    • Dividido em duas partes:
      • Dados Inicializados: Armazena variáveis globais que foram inicializadas explicitamente no código (ex.: int x = 10;).
      • Dados Não Inicializados (BSS): Contém variáveis globais declaradas, mas não inicializadas (ex.: int x;).
    • A alocação dessas variáveis é feita durante a compilação ou o carregamento do programa.

Pilha (Stack)

  • O que é: Utilizada para chamadas de funções e variáveis locais.
  • Função:
    • Armazena:
      • Variáveis locais de funções (ex.: int x dentro de uma função).
      • Endereços de retorno das funções (para saber para onde voltar após uma função terminar).
    • Gerencia o fluxo de execução do programa.
  • Características:
    • Funciona como uma estrutura LIFO (último a entrar, primeiro a sair).
    • A memória é automaticamente alocada e liberada quando funções são chamadas e terminam.
    • Tamanho limitado: pode causar um estouro de pilha (stack overflow) com recursões profundas ou uso excessivo de variáveis locais.

Heap

  • O que é: Usada para alocação dinâmica de memória.
  • Função:
    • Permite que o programa aloque e libere memória de forma manual durante a execução.
    • Exemplos:
      • Em C, malloc ou calloc alocam memória no heap.
      • Em Python, o uso de objetos (listas, dicionários, etc.) utiliza o heap.
  • Características:
    • Cresce dinamicamente (ao contrário da pilha).
    • A memória precisa ser gerenciada manualmente (liberada quando não for mais necessária, ex.: free() em C).
    • Pode causar problemas como vazamento de memória (quando a memória alocada não é liberada).