Gráfico de comparação
Base para Comparação | Novo | malloc () |
---|---|---|
Língua | O 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ífico | O malloc exige que o operador sizeof saiba qual o tamanho da memória que tem para distribuir. |
Construtor | O operador new pode chamar o construtor de um objeto. | malloc () não pode de forma alguma fazer uma chamada para um construtor. |
Inicialização | O 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. |
Sobrecarga | Operador novo pode estar sobrecarregado. | O malloc () nunca pode ser sobrecarregado. |
Falha | Na falha, o operador new lança uma exceção. | Em caso de falha, malloc () retorna um NULL. |
Desalocação | A 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ção | O novo operador não realoca memória. | Memória alocada por malloc () pode ser realocada usando realloc (). |
Execução | O 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 ()
- 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 ++.
- 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.
- 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.
- O operador 'new' poderia estar sobrecarregado, mas malloc () não poderia.
- 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.
- 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 ().
- 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 ().
- 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 ().