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.