Malloc proti Newu
Eno najpogostejših vprašanj v zvezi z intervjujem pri najemu računalniškega programerja je, da prosilec / računalniški programer razloži razlike med mallokom in novim. Tako malloc kot novo obstajata v računalniškem jeziku in ga računalniški programerji pogosto uporabljajo za dinamično dodelitev pomnilnika.
Osnovna razlika med obema je, da malloc obstaja v jeziku C, medtem ko je nov posebnost jezika C ++. Malloc je tudi funkcija (ki programerjem potrebuje nekaj časa za izvedbo), nova pa operacijski program (ki skrajša čas izvedbe). To je korist od operaterja novo, ker programerji, ki izvajajo programiranje v realnem času, morajo izbrati najhitrejši način uporabe.
Operator new je varno za tip za razliko od funkcije malloc.
Funkcija malloc je funkcija knjižnice za jezik C. Vse, kar počne, je dodeliti spomin in vanj vrniti kazalec. Po drugi strani je operator new konstrukt na ravni jezika in njegova naloga je ustvarjanje predmeta z dodeljevanjem pomnilnika in klicanjem ustreznih konstruktorjev. Druga razlika funkcije malloc od operaterja new je, da malloc med deklaracijo zahteva tipkanje, medtem ko prvi ne. Funkcija malloc uporablja besedo "prosto" za brisanje pomnilnika, medtem ko se v operaterju nova za podoben namen uporablja "Delete".
Prav tako imata različne načine za reševanje odpovedi in izčrpavanja spomina. Če funkcija malloc ne uspe, se vrne s kazalcem NULL. Operator new nikoli ne vrne kazalca NULL, ampak nakaže neuspeh, tako da vrže izjemo. To je prednost za novega operaterja, saj programerju ni treba preveriti vrnjenega kazalca vsakič, ko pokliče novo niti računalniški programer ne bo zamudil takšne izjeme.
Funkcija malloc ne konstruira predmeta (imenovanega konstruktor objekta), ampak operator new. Druga prednost novega je, da se lahko operater preobremeni, medtem ko funkcija malloc ne more. Operator new potrebuje dodeljeno določeno število predmetov, medtem ko funkcija malloc zahteva določitev skupnega števila bajtov, ki jih želite dodeliti.
Pomnilnik je mogoče znova spremeniti ali prerazporediti s funkcijo malloc z uporabo realloc. Vendar pa operator new ne more opravljati te funkcije in jo šteje za eno od glavnih pomanjkljivosti operaterja. Druga prednost funkcije malloc over operator new je, da malloc hitro poveča količino pomnilnika. To še vedno uporabljata malloc in realloc. Ko dela isto situacijo v jeziku C ++, mora programer ustvariti nov kos spomina z operaterjem new. Novi pomnilnik mora imeti spremenjeno velikost in bo kopiran preko podatkov iz prvotnega medpomnilnika. Izvirni medpomnilnik je treba po kopiji izbrisati. Za programerja je to lahko počasen postopek.
Operator new ima vzvod nad funkcijo malloc, tako da vrne natančen tip podatkov, medtem ko funkcija vrne void *. Funkcije malloc tudi ni mogoče preobremeniti v primerjavi z operaterjem new, kjer je možna preobremenitev. Druga značilnost novega operaterja je, da je manj možnosti za napake pri operaterju v primerjavi s funkcijo malloc. To velja za plus za programerje, še posebej, če pišejo številne kode ali delajo kodo v strogem razporedu. Funkcijo malloc in free lahko uporabljate v C ++, vendar je ni mogoče neposredno uporabiti. Priporočljivo je, da namesto tega uporabite novo in izbrišete.
Povzetek:
1. Malloc je funkcija, medtem ko je nov operater.
2. Novost je posebnost jezika C ++, medtem ko se malloc uporablja v jeziku C.
3. Operator new sledi z "delete", medtem ko funkcija malloc gre z "free".
4. Function malloc je funkcija knjižnice za jezik C, operater new pa konstrukt na ravni jezika iz jezika C ++.