Salīdzinājuma diagramma
Salīdzinājuma pamats | jauns | malloc () |
---|---|---|
Valoda | Operators jauns ir īpaša iezīme C ++, Java un C #. | Funkcija malloc () ir C iezīme. |
Daba | "jauns" ir operators. | malloc () ir funkcija. |
izmērs () | jaunajam nav vajadzīgs lielums operatoram, kas piešķir pietiekamu atmiņu īpašam tipam | Malloc pieprasa lieluma operatoram zināt, kādam atmiņas apjomam tas ir jāpiešķir. |
Konstruktors | Operators new var izsaukt objekta konstruktoru. | malloc () nevar piezvanīt konstruktoram. |
Inicializācija | Jaunais operators var inicializēt objektu, piešķirot tam atmiņu. | Atmiņas inicializāciju nevarēja veikt malloc. |
Pārslodze | Operators new var tikt pārslogots. | Malloc () nekad nevar pārslogot. |
Kļūme | Pēc kļūmes operatora jaunie izmet izņēmumus. | Pēc neveiksmes malloc () atgriež NULL. |
Izvietojums | Atmiņas piešķiršana, izmantojot jaunus, izvietotus, izmantojot "dzēst". | Atmiņas piešķiršana, ko veic malloc (), tiek sadalīta, izmantojot brīvu () funkciju. |
Pārdalīšana | Jaunais operators neizplata atmiņu. | Malloc () piešķirto atmiņu var pārdalīt, izmantojot realloc (). |
Izpilde | Operators no jauna samazina izpildes laiku. | Malloc () prasa vairāk laika izpildei. |
Jaunu definīcija
Operators new ir atmiņas sadalīšanas operators, kas dinamiski piešķir atmiņu. Jaunais operators sadala atmiņu kaudzē un atgriež tās atmiņas sākuma adresi, kas piešķirta atsauces mainīgajam. Jaunais operators ir līdzīgs malloc () in C. Tomēr C ++ kompilators ir saderīgs ar malloc (), bet vislabāk ir izmantot jaunu operatoru, jo tam ir dažas priekšrocības salīdzinājumā ar malloc (). Jaunā operatora sintakse ir šāda:
tipa mainīgais_nosaukums = jauns tips (parametrs_list);
Šeit "tips" apzīmē tā mainīgā datu tipu, kuram ir jāpiešķir atmiņa. Vārds “mainīgais_nosaukums” ir nosaukums, kas dots atsauces mainīgajam, kas tur rādītāju uz atmiņu. Iekavās šeit ir norādīts konstruktora izsaukums. Parametrs_list ir to vērtību saraksts, kuras tiek nodotas konstruktoram, lai inicializētu jaunizveidoto objektu.
Jaunais operators piešķir pietiekami daudz atmiņas, kas nepieciešama konkrēta veida objektam. Līdz ar to tai nav nepieciešama lieluma () operatora, kā arī nav jāmaina atmiņas, piemēram, malloc (), kas izmanto realloc (), lai pārdalītu atmiņu. Jaunais operators ir konstrukts; tā izsauc objekta konstruktoru, bet deklarāciju, kuru parasti izmanto, lai inicializētu objektu.
Mēs zinām, ka jaunais operators piešķir atmiņu kaudzē un kaudzes izmērs ir ierobežots. Tātad, ja kaudze ir ārpus atmiņas un jauns operators mēģina piešķirt atmiņu, tas novedīs pie jaunā operatora kļūmes. Ja jaunais operators nespēj piešķirt atmiņu, tas izmet izņēmumu, un, ja jūsu kods nespēs apstrādāt šo izņēmumu, programma beidzas neparasti.
Jaunā operatora piešķirto atmiņu var atbrīvot, izmantojot dzēšanas operatoru. Jaunais operators pārtrauc izpildes laiku, jo tas ir operators, nevis funkcija.
Malloc definīcija ()
Malloc () ir funkcija, kas tiek izmantota, lai piešķirtu pieprasīto atmiņas apjomu kaudzei. Šī metode atgriež "tukša" tipa rādītāju, kas ir tālāk, ierakstiet cast, lai iegūtu rādītāju uz noteikta veida atmiņu, un šis rādītājs uz atmiņu tiek piešķirts atsauces mainīgajam. Malloc () funkcija ir līdzīga jaunajam operatoram C ++, jo tā tiek izmantota, lai dinamiski sadalītu atmiņu. Malloc () ir standarta bibliotēkas funkcija. Malloc () funkcijas sintakse ir šāda:
tipa mainīgais_nosaukums = (tips *) malloc (izmērs (tips));
Šeit "tips" norāda tā mainīgā datu tipu, kuram ir jāpiešķir atmiņa. Mainīgais_name ir tā atsauces mainīgā nosaukums, kuram tiks piešķirts malloc () atgrieztais rādītājs. (Tips *) apraksta tipa liešanu, lai iegūtu rādītāju konkrētā tipa atmiņā. Sizeof () raksturo malloc (), kas ir nepieciešams atmiņas lielumam.
Malloc () pieprasa tipa liešanu, jo malloc () atdotais rādītājs ir tukša tipa, tāpēc, lai piešķirtu tipam rādītāju, ir nepieciešama tipa liešana. Izmērs () ir vajadzīgs, jo funkcija malloc () piešķir neapstrādātu atmiņu, tāpēc ir jāpasaka malloc () funkcija, kas ir tās atmiņas lielums, kas tam jāpiešķir. Ja piešķirtā atmiņa nav pietiekama, to var mainīt vai pārdalīt, izmantojot reāllaika ().
Malloc () funkcija iedala atmiņu kaudzē. Gadījumā, ja kaudze ir ārpus atmiņas, malloc () funkcija atgriež NULL rādītāju. Līdz ar to atsauces mainīgais lielums, kas satur Malloc () atgriezto rādītāju, jāpārbauda pirms tā izmantošanas, pretējā gadījumā tas var izraisīt sistēmas avāriju.
Ar Malloc () funkciju piešķirtā atmiņa tiek sadalīta, izmantojot bezmaksas (). Tā kā funkciju zvans noved pie virsplūsmas, malloc () prasa vairāk laika izpildei.
Galvenās atšķirības starp jauno un Malloc ()
- Jaunais operators ir konstrukcija, kas ieviesta C ++ un ko izmanto Java, C # utt. No otras puses, malloc () ir standarta bibliotēku funkcija, kas atrodama tikai C valodā un ko atbalsta C ++.
- Jaunais operators piešķir pietiekami daudz atmiņas konkrēta veida objektam, tāpēc tas neprasa lieluma operatoru. No otras puses, malloc () funkcija prasa, lai lieluma () operators ļautu funkcijai zināt, ka tai ir jāpiešķir atmiņas apjoms.
- Deklarācijā jaunais operators var izsaukt objekta konstruktoru. No otras puses, malloc () funkcija nevar izsaukt konstruktoru.
- Operators “jauns” varētu tikt pārslogots, bet malloc () nevarēja.
- Ja jaunais operators nespēj piešķirt atmiņu, tas izstaro izņēmumu, kas jārīkojas ar kodu, ja programma pārtrauks darbību. No otras puses, malloc () funkcija atgriež NULL rādītāju, ja tā nespēj piešķirt atmiņu. Ja rādītājs tiek izmantots, nepārbaudot to, rezultāts būs sistēmas crash.
- Atmiņu, kas piešķirta, izmantojot jaunu operatoru, var izvietot, izmantojot “dzēst”. No otras puses, ar malloc () funkciju piešķirto atmiņu var izvietot, izmantojot bezmaksas ().
- Tiklīdz atmiņa tiek piešķirta, izmantojot jaunu operatoru, to jebkurā gadījumā nevar mainīt. No otras puses, ar malloc () funkciju piešķirtā atmiņa var tikt pārdalīta (mainīta), izmantojot realloc () funkciju.
- Jaunā izpildes laiks ir mazāks, salīdzinot ar malloc (), jo malloc ir funkcija un jauns ir konstrukts.
Secinājums:
Malloc () funkcija ir vecais veids, kā dinamiski sadalīt atmiņu. Mūsdienās jauno operatoru izmanto, lai piešķirtu atmiņu izpildīšanas laikā, jo tai ir dažas priekšrocības salīdzinājumā ar malloc ().