GeeksforGeeks (Português)

Memory in a C/C++ / Java program can either be allocated on stack or heap.
pré-requisito: layout de memória do programa C.alocação de pilha: a alocação acontece em blocos contíguos de memória. Nós chamamos de alocação de memória de pilha porque a alocação acontece na pilha de chamadas de função. O tamanho da memória a ser alocada é conhecido pelo compilador e sempre que uma função é chamada, suas variáveis recebem memória alocada na pilha. E sempre que a chamada de função termina, a memória para as variáveis é desalocada., Isso tudo acontece usando algumas rotinas predefinidas no compilador. Um programador não tem que se preocupar com alocação de memória e alocação de variáveis de pilha. Este tipo de alocação de memória também conhecido como alocação temporária de memória porque assim que o método termina sua execução todos os dados pertencem a esse método flui para fora da pilha automaticamente. Significa que qualquer valor armazenado no esquema de memória da pilha é acessível desde que o método não tenha completado sua execução e atualmente em execução.,

pontos-chave:

  • É um esquema temporário de alocação de memória onde os membros de dados só são acessíveis se o método( ) que os continha estiver atualmente em execução.
  • ele aloca ou desalloca a memória automaticamente assim que o método correspondente completa sua execução.
  • recebemos o erro correspondente Java. idioma. StackOverFlowError da JVM, se a memória da pilha estiver completamente preenchida.
  • Stack memory allocation is considered safer as compared to heap memory allocation because the data stored can only be access by owner thread.,
  • alocação de memória e deallocação é mais rápido em comparação com alocação de memória de Heap.
  • Stack-memory has less storage space as compared to Heap-memory.,373″>
int b;
int n = 20;
int c;
}



Heap Allocation: The memory is allocated during the execution of instructions written by programmers., Note que o heap nome não tem nada a ver com a estrutura de dados heap. Ele é chamado de heap porque é uma pilha de espaço de memória disponível para programadores para alocação e desalatamento. Cada vez que fazemos um objeto, ele sempre cria em Heap-space e a informação de referência a esses objetos são sempre armazenados em Stack-memory. Heap memory allocation is not as safe as Stack memory allocation was because the data stored in this space is accessible or visible to all threads. Se um programador não lidar bem com esta memória, uma fuga de memória pode acontecer no programa.,

a alocação de Heap-Memória é ainda dividida em três categorias:- estas três categorias nos ajudam a priorizar os dados(objetos) a serem armazenados no Heap-memory ou na coleção de lixo.

  • geração jovem-é a porção da memória onde todos os novos dados(objetos) são feitos para alocar o espaço e sempre que esta memória é completamente preenchida, então o resto dos dados é armazenado na coleta de lixo.,
  • geração antiga ou Tenured – esta é a parte da memória Heap que contém os objetos de dados mais antigos que não estão em uso frequente ou não estão em uso em tudo são colocados.
  • geração permanente – esta é a porção de Heap-memory que contém os metadados da JVM para as classes de tempo de execução e métodos de Aplicação.

pontos chave:

  • recebemos a correspondente mensagem de erro se Heap-space estiver inteiramente cheio, java. idioma.Fora do meu erro pela JVM.,
  • este esquema de alocação de memória é diferente da alocação de espaço de pilha, aqui não é fornecido Nenhum futuro de alocação automática. Precisamos usar um coletor de lixo para remover os objetos antigos não utilizados, a fim de usar a memória de forma eficiente.
  • o tempo de Processamento(tempo de acesso) desta memória é bastante lento em comparação com a pilha-memória.
  • Heap-memory is also not threaded-safe as Stack-memory because data stored in Heap-memory are visible to all threads.
  • O tamanho do Heap-memory é bem maior em comparação com a pilha-memória.,
  • Heap-memory is accessible or exists as long as the whole application (or java program) runs.,iv> *ptr = new int;
}



Misturados exemplo de ambos os tipo de alocação de memória Heap e Pilha em java:

são as Seguintes conclusões sobre o que nós vamos fazer depois de analisar o exemplo acima:

  • Como podemos iniciar a execução do programa, todas as classes de tempo de execução são armazenados no Heap-espaço de memória.,
  • então encontramos o método principal() na próxima linha que é armazenada na pilha junto com tudo que é primitivo(ou local) e a variável de referência Emp_detail também será armazenada na pilha e apontará para o objeto correspondente armazenado na memória Heap.
  • Então a próxima linha chamará para o construtor parametrizado Emp (int, String) do main () e também irá alocar para o topo do mesmo bloco de memória da pilha. Isto irá guardar:
    • A referência do objecto invocado da memória da pilha.,
    • o valor primitivo (tipo de dados primitivos) int id na memória da pilha.
    • a variável de referência do argumento String emp_name que irá apontar para a string actual do string pool para a memória heap.
  • Então o método principal irá novamente chamar para o método estático Emp_detail (), para o qual a alocação será feita no bloco de memória da pilha no topo do bloco de memória anterior.
  • Assim, para o Emp objecto recém-criado do tipo Emp_detail e todas as variáveis de instância serão armazenadas na memória heap.representação pictórica, como mostrado na figura.,1 abaixo:

    Fig.1

    as principais Diferenças Entre a Pilha e Alocações de Heap

    1. Em uma pilha, a alocação e desalocação de são feito automaticamente por enquanto, em pilha, ele precisa ser feito pelo programador manualmente.
    2. A manipulação da estrutura de Heap é mais custosa do que a manipulação da estrutura de pilha.
    3. o problema de falta de memória é mais provável de acontecer na pilha, enquanto que o principal problema na pilha de memória é a fragmentação.,
    4. Stack frame access is easier than the heap frame as the stack have a small region of memory and is cache-friendly, but in case of heap frames which are dispersed throughout the memory so it causes more cache misses.
    5. uma pilha não é flexível, o tamanho da memória alocada não pode ser alterado enquanto um heap é flexível, e a memória alocada pode ser alterada.
    6. acessar o tempo de heap takes é mais do que uma pilha.,

    Gráfico de Comparação

    Parâmetro STACK PILHA
    Basic Memória é alocada em um bloco contíguo. a memória é alocada em qualquer ordem aleatória.
    alocação e alocação automática por instruções de compilador. Manual by the programmer.,d>Less More
    Implementation Hard Easy
    Access time Faster Slower
    Main Issue Shortage of memory Memory fragmentation
    Locality of reference Excellent Adequate
    Flexibility Fixed-size Resizing is possible
    Data type structure Linear Hierarchical

    Article Tags :

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *