Võrdluskaart
Võrdluse alus | uus | malloc () |
---|---|---|
Keel | Uus operaator on C ++, Java ja C # spetsiifiline omadus. | Funktsioon malloc () on C omadus. |
Loodus | "uus" on operaator. | malloc () on funktsioon. |
suurus () | uus ei vaja suuremat operaatorit, kuna see annab teatud tüüpi mälu piisavalt | malloc nõuab, et operaator saaks teada, millise mälu suurus peab olema. |
Konstruktor | Uus operaator võib helistada objekti konstruktorile. | malloc () ei saa üldse konstruktorile helistada. |
Initsialiseerimine | Uus operaator võib objekti mälu vormindada. | Mälu initsialiseerimist ei õnnestunud mallocis teha. |
Ülekoormus | Uus operaator võib olla ülekoormatud. | Malloc () ei saa kunagi üle koormata. |
Rike | Rikke korral annab operaator välja erandi. | Rikke korral tagastab malloc () NULL. |
Müük | Mälu jaotus uute, jaotatud "kustutamise" abil. | Malloc () mälu jaotus jaotatakse vaba () funktsiooni abil. |
Ümberjaotamine | Uus operaator ei jaga mälu ümber. | Malloc () poolt eraldatud mälu saab realloc () abil ümber jaotada. |
Täitmine | Operaator uuendab kärbimise aega. | Malloc () nõuab täitmiseks rohkem aega. |
Uue mõiste
Uus operaator on mälu jaotamise operaator, mis jaotab mälu dünaamiliselt. Uus operaator jaotab mälu hunnikusse ja tagastab selle mälu alguse aadressi, mis on määratud võrdlusmuutujale. Uus operaator on sarnane malloc () -ga C-s. Kuid C ++-kompilaator ühildub malloc'iga (), kuid kõige parem on kasutada uut operaatorit, kuna sellel on mallokile () võrreldes teatud eelised. Uue operaatori süntaks on järgmine:
tüüp muutuja_nimi = uus tüüp (parameeter_list);
Siin tähistab “tüüp” selle muutuja andmesidet, mille jaoks mälu tuleb eraldada. Sõna „muutuja_nimi” on nimi, mis on antud viitemuutujale, mis hoiab kursorit mällu. Sulgudes on siin märgitud ehitaja kutsumine. Parameeter_list on nimekiri väärtustest, mis edastatakse konstruktorile äsja ehitatud objekti vormindamiseks.
Uus operaator eraldab teatud tüüpi objektile vajaliku mälu. Seega ei nõua see suuremat () operaatorit ega vaja ka mälu sarnase suuruse muutmist nagu malloc (), mis kasutab realloc () mälu ümberjaotamiseks. Uus operaator on konstrukt; ta kutsub objekti konstruktorit deklaratsiooni, mida tavaliselt kasutatakse objekti initsialiseerimiseks.
Me teame, et uus operaator jaotab mälu hunnikusse ja kuhja suurus on piiratud. Seega, kui hunnik on mälust väljas ja uus operaator üritab mälu eraldada, toob see kaasa uue operaatori rikke. Kui uus operaator mälu ei eralda, viskab ta välja erandi ja kui teie kood ei suuda seda erandit käsitleda, lõpeb programm ebanormaalselt.
Uue operaatori poolt eraldatud mälu saab vabastada operaatori kustutamise abil. Uus operaator katkestab täitmise aja, kuna see on operaator, mitte funktsioon.
Malloki mõiste ()
Malloc () on funktsioon, mida kasutatakse soovitud koguse mälu eraldamiseks hunnikule. Meetod tagastab "tühiku" tüübi kursorit, mis on edasi, tippige kindla tüübi mälu saamiseks kursor, mis näitab mälu, mis on määratud viitemuutujale. Malloc () funktsioon on sarnane uue operaatoriga C ++-s, kuna seda kasutatakse mälu dünaamiliseks eraldamiseks. Malloc () on tavaline raamatukogu funktsioon. Malloc () funktsiooni süntaks on järgmine:
tüüp muutuja_nimi = (tüüp *) malloc (sizeof (type));
Siin tähistab “tüüp” selle muutuja andmete tüüpi, mille jaoks mälu tuleb eraldada. Muutuja_nimi on selle viitemuutuja nimi, kellele malloc () tagastatud kursor määratakse. (Tüüp *) kirjeldab tüübi valimist, et saada kindla tüübi mälu. Suurus () kirjeldab malloc (), et millist mälu on vaja.
Malloc () vajab tüübivalimist, sest malloc () tagastatud kursor on tühist tüüpi, nii et tüübi määramiseks kursorile on vaja tüübivalimist. Suurus () on vajalik, sest funktsioon malloc () eraldab toormälu, mistõttu on vaja öelda malloc () funktsioonile, millist mälu suurust ta peab eraldama. Kui eraldatud mälu ei ole piisav, saab seda muuta või ümber jaotada realloc () abil.
Malloc () funktsioon eraldab kuhja mälu. Juhul, kui hunnik on mälust väljas, tagastab malloc () funktsioon NULL pointer. Seega tuleks malloc () poolt tagastatud viitemuutuja, mis sisaldab kursorit, kontrollida enne selle kasutamist, vastasel juhul võib see põhjustada süsteemi krahhi.
Malloc () funktsiooni poolt eraldatud mälu jaotatakse vaba () abil. Kuna funktsioonikõne viib üldkuluni, nõuab malloc () täitmiseks rohkem aega.
Peamised erinevused uue ja malloc vahel ()
- Uus operaator on konstruktsioon, mis on sisse viidud C ++ ja mida kasutatakse Java, C # jne. Teiselt poolt on malloc () tavaline raamatukogu funktsioon, mis on leitud ainult C keeles ja mida toetab C ++.
- Uus operaator eraldab kindla tüüpi objekti jaoks piisavalt mälu, nii et see ei vaja suuruse haldurit. Teisest küljest nõuab malloc () funktsioon suuruse () operaatorilt, et see funktsiooni teaks, et milline mälu suurus talle eraldada.
- Uus operaator võib deklaratsiooni esitamise ajal helistada objekti konstruktorile. Teisest küljest ei saa malloc () funktsioon konstruktorit kutsuda.
- Operaator "uus" võiks olla ülekoormatud, kuid malloc () ei saanud.
- Kui uus operaator mälu ei eralda, siis see viskab välja erandi, mida kood peab käsitlema, kui programm lõpetab. Teisest küljest tagastab malloc () funktsioon NULL-pointeri, kui see mälu ei eralda. Kui kursorit kasutatakse seda kontrollimata, toob see kaasa süsteemi krahhi.
- Uue operaatori abil eraldatud mälu saab jagada „kustutamise” abil. Teisest küljest saab malloc () funktsiooni abil eraldatud mälu jagada tasuta () abil.
- Kui mälu on eraldatud uue operaatori abil, ei saa seda niikuinii muuta. Teisest küljest saab malloc () funktsiooni abil eraldatud mälu realloc () funktsiooni abil ümber jaotada (muuta).
- Uue teostuse aeg on malloc () -ga võrreldes väiksem, sest malloc on funktsioon ja uus on konstrukt.
Järeldus:
Malloc () funktsioon on vana viis mälu dünaamiliseks jaotamiseks. Tänapäeval kasutatakse uut operaatorit mälu jaotamiseks runtime ajal, kuna tal on teatud eelised malloc () suhtes.