c++ - what - stack memory in c




Por que dois conceitos diferentes são chamados de “heap”? (6)

Por que o heap de tempo de execução é usado para alocação de memória dinâmica em linguagens no estilo C e a estrutura de dados é chamada de "heap"? Existe alguma relação?


A colisão do nome é lamentável, mas não tão misteriosa assim. Heap é uma palavra pequena e comum que significa pilha, coleção, grupo, etc. O uso da palavra para a estrutura de dados é pré-datado (tenho certeza) do nome do pool de memória. Na verdade, piscina teria sido uma escolha muito melhor para o último, na minha opinião. Heap conota uma estrutura vertical (como uma pilha), que se ajusta à estrutura de dados, mas não ao pool de memória. Nós não pensamos em um heap do pool de memória como hierárquico, enquanto a idéia fundamental por trás da estrutura de dados é manter o maior elemento no topo do heap (e sub-heaps).

Heap a estrutura de dados remonta a meados dos anos 60; acumular o pool de memória, o início dos anos 70. O termo heap (que significa pool de memória) foi usado pelo menos em 1971 por Wijngaarden nas discussões de Algol.

Possivelmente, o uso mais antigo de heap como uma estrutura de dados é encontrado sete anos antes em
Williams, JWJ 1964. "Algoritmo 232 - Heapsort", Comunicações do ACM 7 (6): 347-348


A estrutura de dados semelhantes a heap é usada pelo algoritmo de localização da alocação de memória disponível. O seguinte é extraído de http://www.cprogramming.com/tutorial/virtual_memory_and_heaps.html .

Quando new é invocado, ele começa a procurar por um bloco de memória livre que se ajusta ao tamanho da sua solicitação. Supondo que esse bloco de memória seja encontrado, ele é marcado como reservado e um ponteiro para esse local é retornado. Existem vários algoritmos para fazer isso porque é necessário fazer um acordo entre a varredura de toda a memória para encontrar o menor bloco livre maior que o tamanho do seu objeto ou retornar o primeiro onde a memória necessária se encaixa. Para melhorar a velocidade de obtenção de um bloco de memória, as áreas livres e reservadas da memória são mantidas em uma estrutura de dados semelhante às árvores binárias chamadas de heap.


Eles têm o mesmo nome, mas eles realmente não são semelhantes (mesmo conceitualmente). Um monte de memória é chamado de heap da mesma maneira que você se refere a um cesto de roupa suja como um "monte de roupas". Esse nome é usado para indicar um local um tanto bagunçado onde a memória pode ser alocada e desalocada à vontade. A estrutura de dados (como o link da Wikipedia que você aponta a referência) é bem diferente.


IMO é apenas um acidente / coincidência que essas duas coisas não relacionadas têm o mesmo nome. É como graph e graph .


Os termos coloquiais stack memory e heap memory não são usados ​​no padrão C ++. O padrão usa armazenamento estático, armazenamento em encadeamento, armazenamento automático e armazenamento dinâmico.

Mais pode ser encontrado na seção Storage Duraction do padrão.

Portanto, do ponto de vista da linguagem e da biblioteca padrão, não há confusão.


Talvez o primeiro heap de memória implementado tenha sido gerenciado por uma estrutura de heap?







heap-memory