Stack vs Heap: Conheça a Diferença

Índice:

Anonim

O que é uma pilha?

Uma pilha é uma área especial da memória do computador que armazena variáveis ​​temporárias criadas por uma função. Na pilha, as variáveis ​​são declaradas, armazenadas e inicializadas durante o tempo de execução.

É uma memória de armazenamento temporário. Quando a tarefa de computação for concluída, a memória da variável será apagada automaticamente. A seção da pilha contém principalmente métodos, variáveis ​​locais e variáveis ​​de referência.

Neste tutorial, você aprenderá,

  • O que é Stack?
  • O que é Heap?
  • Principais diferenças entre pilha e pilha
  • Vantagens de usar Stack
  • Vantagens de usar Heap
  • Desvantagens de usar Stack
  • Desvantagens de usar Heap
  • Quando usar o Heap ou a pilha?

O que é Heap?

O heap é uma memória usada por linguagens de programação para armazenar variáveis ​​globais. Por padrão, todas as variáveis ​​globais são armazenadas no espaço de memória heap. Ele suporta a alocação de memória dinâmica.

O heap não é gerenciado automaticamente para você e não é gerenciado com tanta rigidez pela CPU. É mais como uma região de memória flutuante.

DIFERENÇA CHAVE

  • Stack é uma estrutura de dados linear, enquanto Heap é uma estrutura de dados hierárquica.
  • A memória de pilha nunca ficará fragmentada, enquanto a memória de heap pode ficar fragmentada à medida que os blocos de memória são primeiro alocados e depois liberados.
  • Stack acessa variáveis ​​locais apenas enquanto Heap permite que você acesse variáveis ​​globalmente.
  • As variáveis ​​de pilha não podem ser redimensionadas, enquanto as variáveis ​​de heap podem ser redimensionadas.
  • A memória de pilha é alocada em um bloco contíguo, enquanto a memória de heap é alocada em qualquer ordem aleatória.
  • Stack não requer a desalocação de variáveis, enquanto em Heap a desalocação é necessária.
  • A alocação e desalocação de pilha são feitas por instruções do compilador, enquanto a alocação e desalocação de heap são feitas pelo programador.

Principais diferenças entre pilha e pilha

Parâmetro Pilha Heap
Tipo de estruturas de dados Uma pilha é uma estrutura de dados linear. Heap é uma estrutura de dados hierárquica.
Velocidade de acesso Acesso de alta velocidade Mais lento em comparação com a pilha
Gerenciamento de espaço Espaço gerenciado de forma eficiente pelo sistema operacional para que a memória nunca se torne fragmentada. O Heap Space não é usado de forma tão eficiente. A memória pode ficar fragmentada à medida que os blocos de memória são primeiro alocados e depois liberados.
Acesso Variáveis ​​locais apenas Ele permite que você acesse variáveis ​​globalmente.
Limite de tamanho do espaço Limite no tamanho da pilha dependente do sistema operacional. Não tem um limite específico para o tamanho da memória.
Redimensionar Variáveis ​​não podem ser redimensionadas As variáveis ​​podem ser redimensionadas.
Alocação de memória A memória é alocada em um bloco contíguo. A memória é alocada em qualquer ordem aleatória.
Alocação e desalocação Feito automaticamente por instruções do compilador. É feito manualmente pelo programador.
Desalocação Não requer desalocar variáveis. A desalocação explícita é necessária.
Custo Menos Mais
Implementação Uma pilha pode ser implementada de 3 maneiras com base em array simples, usando memória dinâmica e com base em lista vinculada. O heap pode ser implementado usando array e árvores.
Problema principal Falta de memória Fragmentação de memória
Localidade de referência Instruções de tempo de compilação automática. Adequado
Flexibilidade Tamanho fixo O redimensionamento é possível
Tempo de acesso Mais rápido Mais devagar

Vantagens de usar Stack

Aqui estão os prós / benefícios de usar a pilha:

  • Ajuda você a gerenciar os dados em um método Last In First Out (LIFO) que não é possível com lista vinculada e matriz.
  • Quando uma função é chamada, as variáveis ​​locais são armazenadas em uma pilha e são destruídas automaticamente quando retornadas.
  • Uma pilha é usada quando uma variável não é usada fora dessa função.
  • Ele permite que você controle como a memória é alocada e desalocada.
  • Stack limpa automaticamente o objeto.
  • Não é facilmente corrompido
  • Variáveis ​​não podem ser redimensionadas.

Vantagens de usar Heap

Prós / benefícios de usar memória heap são:

  • Heap ajuda você a encontrar o maior e o mínimo número
  • A coleta de lixo é executada na memória heap para liberar a memória usada pelo objeto.
  • Método de heap também usado na Fila de prioridade.
  • Ele permite que você acesse variáveis ​​globalmente.
  • O heap não tem limite de tamanho de memória.

Desvantagens de usar Stack

Contras / desvantagens de usar a memória Stack:

  • A memória da pilha é muito limitada.
  • Criar muitos objetos na pilha pode aumentar o risco de estouro da pilha.
  • O acesso aleatório não é possível.
  • O armazenamento de variáveis ​​será sobrescrito, o que às vezes leva a um comportamento indefinido da função ou programa.
  • A pilha ficará fora da área de memória, o que pode levar a um encerramento anormal.

Desvantagens de usar Heap

Contras / desvantagens de usar a memória Heaps são:

  • Ele pode fornecer o máximo de memória que um sistema operacional pode fornecer
  • Leva mais tempo para calcular.
  • O gerenciamento de memória é mais complicado na memória heap, pois é usado globalmente.
  • Demora muito tempo na execução em comparação com a pilha.

Quando usar o Heap ou a pilha?

Você deve usar heap quando precisar alocar um grande bloco de memória. Por exemplo, se você deseja criar uma matriz de grande tamanho ou uma estrutura grande para manter essa variável por um longo tempo, você deve alocá-la no heap.

No entanto, se você estiver trabalhando com variáveis ​​relativamente pequenas, isso só será necessário até que a função que as usa esteja ativa. Em seguida, você precisa usar a pilha, o que é mais rápido e fácil.