new/delete
Dizem que as alocações dinâmicas ocorrem no free-store ,
enquanto as malloc/free
operações usam o heap .
Eu gostaria de saber se existe uma diferença real, na prática.
Os compiladores fazem uma distinção entre os dois termos? ( Loja gratuita e Heap , não new/malloc
)
fonte
Para C ++, a diferença entre o armazenamento gratuito e o heap tornou-se puramente conceitual. Como uma jarra para coletar bugs e outra para coletar cookies. Um é rotulado de um jeito, o outro de outro. Essa designação deve levar em consideração o ponto em que você NUNCA mistura "
new
" e "delete
" com "malloc
", "realloc
" ou "free
" (ou nível de bits definido para esse assunto).Durante as entrevistas, é bom dizer que "
new
edelete
use o armazenamento gratuitomalloc
efree
use a pilha;new
edelete
chame o construtor e o destruidor, respectivamente, no entantomalloc
efree
não." No entanto, muitas vezes você ouvirá que os segmentos de memória estão realmente na mesma área - no entanto, que PODEM ser específicos do compilador, ou seja, é possível que ambos possam designar diferentes espaços de memória como conjuntos (sem saber por que, Apesar).fonte
A resposta de Mike Koval cobre muito bem a teoria. Na prática, no entanto, eles são quase sempre a mesma região de memória - na maioria dos casos, se você pesquisar na implementação do compilador
new
, encontrará as chamadasmalloc()
.Em outras palavras: do ponto de vista da máquina, heap e free store são a mesma coisa. A distinção existe dentro do compilador.
Para tornar as coisas ainda mais confusas, antes do advento do C ++, dissemos "heap" para significar o que agora é chamado de "armazenamento gratuito".
fonte
O termo "heap" também pode se referir a uma estrutura de dados específica, mas, no contexto das operações malloc C ++, free, new e delete, os termos "heap" e "free store" são usados mais ou menos de forma intercambiável.
fonte
Heap e free-store não devem ser interoperáveis. Em contextos restritos, como nos microcontroladores AVR de 8 bits com a biblioteca padrão c ++ 11, eles nem sequer podem ser usados no mesmo programa. Armazenamento livre e heap fazem suas alocações no mesmo espaço de memória, substituindo as estruturas e os dados. Nesse contexto, o armazenamento gratuito é diferente e incompatível com o Heap porque a "nova / exclui biblioteca de armazenamento livre" é mais simples (e mais rápida) que a "biblioteca de heap Malloc / free / realloc / calloc" e, portanto, fornece enormes ganhos de uso de memória para o Heap. Programador incorporado C ++ (em um contexto em que você possui apenas 512 bytes de RAM).
Consulte a Biblioteca padrão c ++ 11/14 de 8 bits em https://github.com/ambroise-leclerc/ETL/tree/master/libstd
fonte
Não me lembro do padrão que mencionou a palavra heap, exceto nas descrições de funções de heap como
push_heap
et al. Todas as alocações dinâmicas são realizadas no free-store.fonte
O Free Store é um conjunto de memória heap não alocada fornecida a um programa usado pelo programa para alocação dinâmica durante a execução do programa. Cada programa é fornecido com um conjunto de memória heap não alocada que ele pode utilizar durante a execução. Esse pool de memória disponível é conhecido como armazenamento gratuito do programa. A memória de armazenamento livre alocada não tem nome.
fonte