Diferença entre new e malloc ()
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:
- Gráfico de comparação
- Definição
- Principais diferenças
- Conclusão
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 () é 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ção | O 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. |
Falha | Em caso de falha, o operador new lança uma exceção. | Na falha, malloc () retorna um NULL. |
Desalocação | A 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ção | O novo operador não realoca a memória. | A memória alocada por malloc () pode ser realocada usando realloc (). |
Execução | O 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.
- 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 ++.
- 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.
- 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 'novo' pode estar sobrecarregado, mas o malloc () não.
- 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.
- 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 ().
- 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 ().
- 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 ().