Verschil tussen Malloc en Nieuw Verschil tussen

Anonim

Malloc versus New

van de meest voorkomende interviewvragen bij het inhuren van een computerprogrammeur is voor de aanvrager / computerprogrammeur om de verschillen tussen malloc en nieuw uit te leggen. Zowel Malloc als New bestaan ​​in het rijk van de computertaal en worden vaak gebruikt door computerprogrammeurs voor dynamische geheugentoewijzingen.

De fundamentele verschillen tussen de twee zijn dat malloc in de C-taal bestaat, terwijl nieuw een specifiek kenmerk van de C ++ -taal is. Malloc is ook een functie (die, voor programmeurs, enige tijd nodig heeft om uit te voeren), terwijl nieuw een operatorprogramma is (dat de uitvoeringstijd verkort). Dit is een voordeel van de operator, omdat programmeurs die realtime programmeren, de snelste methode moeten kiezen om te gebruiken.

Operator nieuw is type-safe in tegenstelling tot de functie malloc.

Functie malloc is bibliotheekfunctie voor de C-taal. Het enige dat het doet is geheugen toewijzen en er een aanwijzer naar terugsturen. Aan de andere kant is operator new een constructie op taalniveau en het is zijn taak om een ​​object te instantiëren door geheugen toe te wijzen en de juiste constructeurs te bellen. Een ander verschil in functie van malloc van operator nieuw is dat malloc typecasting vereist tijdens declaratie, terwijl eerstgenoemde niet. Bovendien gebruikt functie malloc het woord "gratis" om het geheugen te wissen, terwijl "verwijderen" wordt gebruikt in een operator die voor hetzelfde doel is.

De twee hebben ook verschillende manieren om met mislukken en geheugenuitputting om te gaan. Als de functie malloc mislukt, wordt deze geretourneerd met een NULL-aanwijzer. Operator nieuw retourneert nooit een NULL-aanwijzer, maar geeft de fout aan door in plaats daarvan een uitzondering te genereren. Dit is een voordeel voor de operator die nieuw is omdat de computerprogrammeur de geretourneerde aanwijzer niet telkens hoeft te controleren als deze nieuw belt, en de computerprogrammeur een dergelijke uitzondering niet zal missen.

Functie malloc maakt geen object (constructor of object genaamd) maar operator new wel. Een ander voordeel van nieuw is dat de operator overbelast kan raken terwijl functie malloc dat niet kan. Operator nieuw vereist een specifiek aantal objecten om toe te wijzen, terwijl functie malloc vereist dat het totale aantal bytes wordt opgegeven dat moet worden toegewezen.

Het geheugen kan ook opnieuw worden bemeten of opnieuw worden toegewezen met behulp van functie malloc door realloc te gebruiken. De operator nieuw kan deze functie echter niet uitvoeren en telt dit als een van de belangrijkste nadelen van de operator. Een ander voordeel van functie-malloc over operator nieuw is dat malloc de hoeveelheid geheugen snel kan uitbreiden. Dit gebruikt nog steeds malloc en realloc. Bij het doen van dezelfde situatie in C ++ taal, moet de programmeur een nieuw geheugenblok creëren met een nieuwe operator. Het nieuwe geheugen moet een gewijzigde grootte hebben en wordt gekopieerd over de gegevens van de oorspronkelijke buffer.De originele buffer moet na de kopie worden verwijderd. Dit kan een langzaam proces zijn voor een programmeur.

Operator new heeft hefboomwerking over functie malloc door het exacte gegevenstype te retourneren terwijl de functie ongeldig is *. Functie malloc kan ook niet worden overbelast in vergelijking met operator nieuw waarbij overbelasting mogelijk is. Een ander nieuw kenmerk van de operator is dat er minder kans is om fouten te maken met de operator in vergelijking met functie malloc. Dit wordt als een pluspunt beschouwd voor programmeurs, vooral als ze veel codes schrijven of in een strak schema aan een code werken. Functie malloc en gratis kan worden gebruikt in C ++, maar het kan niet direct worden gebruikt. Het is raadzaam om in plaats daarvan nieuw te gebruiken en te verwijderen.

Samenvatting:

1. Malloc is een functie terwijl nieuw een operator is.

2. Nieuw is een specifiek kenmerk van de C ++ -taal, terwijl malloc wordt gebruikt in de C-taal.

3. Operator nieuw volgt met "verwijderen" terwijl functie malloc overeenkomt met "gratis". “

4. Functie malloc is bibliotheekfunctie voor de C-taal terwijl operator nieuw een taalniveau-constructie is uit de C ++ -taal.