Recomendado, 2024

Escolha Do Editor

Diferença entre new e malloc ()

O novo e malloc () ambos são usados ​​para alocar dinamicamente a memória. Porém, new e malloc () são diferentes em muitos contextos. A principal diferença entre new e malloc () é que new é o operador, usado como uma construção. Por outro lado, 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:

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 () é uma característica de C.
Natureza"novo" é um operador.malloc () é uma função.
tamanho de( )novo não precisa do operador sizeof como alocar memória suficiente para um tipo específicoO malloc exige que o operador sizeof saiba qual o tamanho da memória que tem para distribuir.
ConstrutorO operador new pode chamar o construtor de um objeto.malloc () não pode de forma alguma fazer uma chamada para um construtor.
InicializaçãoO operador new poderia inicializar um objeto ao alocar memória para ele.A inicialização da memória não pôde ser feita no malloc.
SobrecargaOperador novo pode estar sobrecarregado.O malloc () nunca pode ser sobrecarregado.
FalhaNa falha, o operador new lança uma exceção.Em caso de falha, malloc () retorna um NULL.
DesalocaçãoA alocação de memória por novo, desalocada usando "excluir".A alocação de memória por malloc () é desalocada usando uma função free ().
RealocaçãoO novo operador não realoca memória.Memória alocada por malloc () pode ser realocada usando realloc ().
ExecuçãoO operador new reduz o tempo de execução.O malloc () requer mais tempo para execução.

Definição de novo

O operador new é um operador de alocação de memória que aloca memória dinamicamente. O novo operador aloca memória no heap e retorna o endereço inicial da 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 ele tem certas vantagens sobre malloc (). A sintaxe do novo operador é a seguinte:

 tipo variable_name = new type (parameter_list); 

Aqui, "type" indica o tipo de dados da variável para a qual a memória deve ser alocada. A palavra “variable_name” é o nome dado à variável de referência que mantém o ponteiro na memória. O parênteses aqui especifica a chamada do construtor. O parâmetro_list é a lista dos valores que são passados ​​para o 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 requer o redimensionamento da memória como malloc () que usa realloc () para realocar a memória. O novo operador é uma construção; ele chama o construtor de um objeto enquanto a declaração é 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 causará a falha do novo operador. Se o novo operador falhar na alocação da memória, ele lançará uma exceção e, se o seu código não conseguir lidar com essa exceção, o programa será finalizado de forma anormal.

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

Definição de malloc ()

O malloc () é uma função que é usada para alocar a quantidade solicitada de memória no heap. O método retorna o ponteiro do tipo 'void' que é mais, digite cast para obter um ponteiro para uma memória de um tipo especificado e este ponteiro para a memória é atribuído a uma variável de referência. A função malloc () é semelhante ao novo operador em C ++, como é usado 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 (tipo)); 

Aqui, "type" indica o tipo de dados da variável para a qual a memória deve ser alocada. O variable_name é o nome da variável de referência para a qual o ponteiro retornado por malloc () será designado. O (tipo *) descreve o tipo de conversão 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 void, portanto, para atribuir um tipo ao ponteiro, o tipo casting é necessário. O sizeof () é necessário porque a função malloc () aloca uma memória bruta, portanto, é necessário informar à função malloc () que tamanho de memória ela 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. No caso, o heap está sem memória, a função malloc () retorna 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, pode resultar em uma falha do 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.

Principais diferenças entre new e malloc ()

  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 pelo 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 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 'new' poderia estar sobrecarregado, mas malloc () não poderia.
  5. Se o novo operador falhar em alocar a memória, ele lançará uma exceção que deve ser manipulada pelo código que o programa encerrará. Por outro lado, a função malloc () retorna um ponteiro NULL se falhar ao alocar memória. Se o ponteiro é usado sem verificar isso, isso resultará em uma falha do sistema.
  6. A memória alocada usando um novo operador pode ser desalocada usando 'delete'. Por outro lado, a memória alocada usando a função malloc () pode ser desalocada usando free ().
  7. Quando a memória é alocada usando um novo operador, ela não pode ser redimensionada de qualquer maneira. 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 novo é menor em comparação com malloc () porque malloc é uma função e new é um constructo.

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 porque tem certas vantagens sobre malloc ().

Top