Diferença entre new e malloc ()

Autor: Laura McKinney
Data De Criação: 1 Abril 2021
Data De Atualização: 5 Poderia 2024
Anonim
Diferença entre new e malloc () - Tecnologia
Diferença entre new e malloc () - Tecnologia

Contente


O novo e malloc () são usados ​​para alocar dinamicamente a memória. Porém, new e malloc () são diferentes em muitos aspectos. A principal diferença entre new e malloc () é que Novo é o operador, usado como uma construção. Por outro lado, o malloc () é uma função de biblioteca padrão, usada para alocar memória em tempo de execução. As outras diferenças entre eles são discutidas abaixo no gráfico de comparação:

  1. Gráfico de comparação
  2. Definição
  3. Principais diferenças
  4. Conclusão

Gráfico de comparação

Base para ComparaçãoNovomalloc ()
LínguaO operador new é um recurso específico de C ++, Java e C #. A função malloc () é um recurso de C.
Natureza"new" é um operador.malloc () é uma função.
tamanho de( )novo não precisa do tamanho do operador, pois aloca memória suficiente para um tipo específico O malloc exige que o operador sizeof saiba qual tamanho de memória ele deve distribuir.
Construtor O operador new pode chamar o construtor de um objeto.malloc () não pode fazer uma chamada para um construtor.
InicializaçãoO operador new pode inicializar um objeto enquanto aloca memória para ele.A inicialização da memória não pôde ser feita no malloc.
Sobrecarga O operador new pode estar sobrecarregado.O malloc () nunca pode ser sobrecarregado.
FalhaEm caso de falha, o operador new lança uma exceção.Na falha, malloc () retorna um NULL.
DesalocaçãoA alocação de memória por nova, desalocada usando "delete".A alocação de memória por malloc () é desalocada usando uma função free ().
RealocaçãoO novo operador não realoca a memória.A memória alocada por malloc () pode ser realocada usando realloc ().
ExecuçãoO operador novo reduz o tempo de execução.O malloc () requer mais tempo para execução.


Definição de novo

O operador Novo é um operador de alocação de memória que aloca memória dinamicamente. O novo operador aloca memória na pilha e retorna o endereço inicial dessa memória que é atribuída a uma variável de referência. O novo operador é semelhante ao malloc () em C. No entanto, o compilador C ++ é compatível com malloc (), mas é melhor usar o novo operador, pois possui certas vantagens sobre o malloc (). A sintaxe do novo operador é a seguinte:

tipo nome_da_variável = novo tipo (lista de parâmetros);

Aqui, "tipo" indica o tipo de dados da variável para a qual a memória deve ser alocada. A palavra "nome_da variável" é o nome dado à variável de referência que mantém o ponteiro na memória. O parêntese aqui especifica a chamada do construtor. A lista de parâmetros é a lista dos valores que são passados ​​ao construtor para inicializar o objeto recém-construído.


O novo operador aloca memória suficiente necessária para um objeto de um tipo específico. Portanto, ele não requer um operador sizeof () nem redimensiona a memória como malloc () que usa realloc () para realocar a memória. O novo operador é uma construção; chama o construtor de um objeto enquanto declaração, que geralmente é usada para inicializar o objeto.

Sabemos que o novo operador aloca a memória no heap e o tamanho do heap é limitado. Portanto, se o heap estiver sem memória e o novo operador tentar alocar a memória, isso levará à falha do novo operador. Se o novo operador falhar ao alocar a memória, lançará uma exceção e, se o seu código não conseguir lidar com essa exceção, o programa será encerrado de forma anormal.

A memória alocada pelo novo operador pode ser liberada usando o operador de exclusão. O novo operador reduz o tempo de execução, pois é um operador, não uma função.

Definição de malloc ()

o malloc () é uma função usada para alocar a quantidade solicitada de memória no heap. O método retorna o ponteiro do tipo 'void', que é ainda mais, do tipo cast para obter um ponteiro para uma memória de um tipo especificado e esse ponteiro para a memória é atribuído a uma variável de referência. A função malloc () é semelhante ao novo operador em C ++, pois é usada para alocar memória dinamicamente. O malloc () é uma função de biblioteca padrão. A sintaxe da função malloc () é a seguinte:

tipo variable_name = (type *) malloc (sizeof (type));

Aqui, "type" indica o tipo de dados da variável para a qual a memória deve ser alocada. O nome da variável é o nome da variável de referência à qual o ponteiro retornado por malloc () será atribuído. O (tipo *) descreve a conversão de tipo para obter um ponteiro para a memória em um tipo específico. O sizeof () descreve malloc (), que tamanho de memória é necessário.

O malloc () requer conversão de tipo porque o ponteiro retornado pelo malloc () é do tipo nulo; portanto, para atribuir um tipo ao ponteiro, a conversão de tipo é necessária. O sizeof () é necessário porque a função malloc () aloca uma memória não processada; portanto, é necessário informar à função malloc () que tamanho de memória ele deve alocar. Se a memória alocada não for suficiente, ela poderá ser redimensionada ou realocada usando realloc ().

A função malloc () aloca memória no heap. Caso a pilha esteja sem memória, a função malloc () retornará um ponteiro NULL. Portanto, a variável de referência que contém o ponteiro retornado por malloc () deve ser verificada antes de ser usada, caso contrário, poderá resultar em uma falha no sistema.

A memória alocada pela função malloc () é desalocada usando free (). Como a chamada de função leva a uma sobrecarga, malloc () requer mais tempo para execução.

  1. O novo operador é uma construção introduzida em C ++ e usada em Java, C # etc. Por outro lado, malloc () é uma função de biblioteca padrão encontrada apenas na linguagem C e suportada por C ++.
  2. O novo operador aloca memória suficiente para o objeto de um tipo especificado, portanto, não requer operador de dimensionamento. Por outro lado, a função malloc () requer que o operador sizeof () informe a função que tamanho de memória ela deve alocar.
  3. O novo operador pode chamar o construtor do objeto durante a declaração. Por outro lado, a função malloc () não pode chamar o construtor.
  4. O operador 'novo' pode estar sobrecarregado, mas o malloc () não.
  5. Se o novo operador falhar ao alocar a memória, lança uma exceção que deve ser tratada pelo código, caso contrário o programa será encerrado. Por outro lado, a função malloc () retorna um ponteiro NULL se não conseguir alocar memória. Se o ponteiro for usado sem verificar isso, resultará em uma falha no sistema.
  6. A memória alocada usando um novo operador pode ser desalocada usando 'excluir'. Por outro lado, a memória alocada usando a função malloc () pode ser desalocada usando free ().
  7. Depois que a memória é alocada usando um novo operador, ela não pode ser redimensionada. Por outro lado, a memória alocada usando a função malloc () pode ser realocada (redimensionada) usando a função realloc ().
  8. O tempo de execução de new é menor em comparação com malloc () porque malloc é uma função e new é uma construção.

Conclusão:

A função malloc () é a maneira antiga de alocar dinamicamente a memória. Atualmente, o novo operador é usado para alocar a memória em tempo de execução, pois possui certas vantagens sobre o malloc ().