„Malloc vs New“
Vienas iš dažniausiai pasitaikančių interviu klausimų samdant kompiuterio programuotoją yra pareiškėjui / kompiuterio programuotojui paaiškinti skirtumus tarp „malloc“ ir naujojo. Ir „malloc“, ir naujosios egzistuoja kompiuterinės kalbos srityje ir kompiuterių programuotojai jas dažnai naudoja dinaminei atminties paskirstymui.
Pagrindiniai skirtumai tarp šių dviejų yra tai, kad „malloc“ egzistuoja C kalba, o naujas yra specifinis C ++ kalbos bruožas. „Malloc“ taip pat yra funkcija (kurios programuotojams vykdyti reikia šiek tiek laiko), o nauja yra operatoriaus programa (kuri sumažina vykdymo laiką). Tai yra naujojo operatoriaus pranašumas, nes programuotojai, atliekantys realiojo laiko programavimą, turi pasirinkti greičiausią naudojamą metodą.
Operatoriaus naujasis tipas yra saugus, skirtingai nuo funkcijos „malloc“.
Funkcija malloc yra C kalbos bibliotekos funkcija. Viskas, ką reikia padaryti, tai paskirstyti atmintį ir grąžinti į ją rodyklę. Kita vertus, naujasis operatorius yra kalbos lygio konstruktas, o jo užduotis yra objekto akimirksniu paskirstyti atmintį ir paskambinti atitinkamiems konstruktoriams. Kitas „malloc“ funkcijos skirtumas nuo naujojo operatoriaus yra tas, kad „malloc“ reikalauja, kad deklaravimo metu būtų reikalaujama spec. Be to, funkcija malloc naudoja žodį „nemokama“, kad išvalytų atmintį, o „ištrinti“ yra naudojama naujame operaciniame įrenginyje tam pačiam tikslui.
Jie abu taip pat turi skirtingus būdus, kaip susidoroti su nesėkmėmis ir atminties išsekimu. Jei funkcija malloc nepavyksta, ji grįžta su NULL rodykle. Naujas operatorius niekada negrąžina NULL rodyklės, bet nurodo gedimą, vietoje to išmesdamas išimtį. Tai yra naujojo operatoriaus pranašumas, nes kompiuterio programuotojui nereikia kaskart patikrinti grąžinto žymeklio, kai jis skambina naujam, taip pat kompiuterio programuotojas nepraleis tokios išimties.
Funkcija malloc nekonstruoja objekto (vadinamo objekto konstruktoriumi), bet naujasis operatorius. Kitas naujovės pranašumas yra tas, kad operatorius gali būti perkrautas, o funkcijos malloc negali. Naujas operatorius reikalauja skirti tam tikrą objektų skaičių, o funkcija malloc reikalauja nurodyti bendrą paskirstytinų baitų skaičių.
Atmintį taip pat galima pakeisti pagal dydį arba perskirstyti naudojant funkciją malloc, naudojant realloc. Tačiau naujasis operatorius negali atlikti šios funkcijos ir tai laiko vienu iš pagrindinių operatoriaus trūkumų. Kitas „malloc“ funkcijos pranašumas, palyginti su naujuoju operatoriumi, yra tas, kad „malloc“ gali greitai išplėsti atminties kiekį. Tam vis dar naudojami „malloc“ ir „realloc“. Darydamas tą pačią situaciją C ++ kalba, programuotojas turi sukurti naują atminties dalį su naujuoju operatoriumi. Naujosios atminties dydis turi būti modifikuotas ir ji bus nukopijuota per duomenis iš pradinio buferio. Po kopijos originalus buferis turi būti ištrintas. Tai gali būti lėtas procesas programuotojui.
Naujasis operatorius turi įtakos „malloc“ funkcijai, grąžindamas tikslų duomenų tipą, o funkcija grąžina negaliojančią *. Funkcija „malloc“ taip pat negali būti perkrauta, palyginti su naujuoju operatoriumi, kurioje įmanoma perkrova. Kitas naujojo operatoriaus bruožas yra tas, kad yra mažiau šansų suklysti su operatoriumi, palyginti su funkcijos malloc funkcija. Tai laikoma pliusu programuotojams, ypač jei jie rašo daug kodų arba dirba pagal kodą griežtu grafiku. Funkcija malloc ir free gali būti naudojama C ++, bet jos negalima naudoti tiesiogiai. Patartina naudoti naują ir ištrinti.
Santrauka:
1. Malloc yra funkcija, o naujas yra operatorius.
2. Nauja yra specifinis C ++ kalbos bruožas, o C-kalboje naudojamas malloc.
3. Naujas operatorius seka su „ištrinti“, o „malloc“ - su „laisvu“.
4. Funkcija malloc yra C kalbos bibliotekos funkcija, o naujasis operatorius yra kalbos lygio konstruktas iš C ++ kalbos.