Atšķirība starp jauno un malloc ()

Autors: Laura McKinney
Radīšanas Datums: 1 Aprīlis 2021
Atjaunināšanas Datums: 5 Maijs 2024
Anonim
Первый стрим за пол года. Отвечаем на важные вопросы!
Video: Первый стрим за пол года. Отвечаем на важные вопросы!

Saturs


Jaunie un malloc () tiek izmantoti, lai dinamiski sadalītu atmiņu. Tomēr jaunais un malloc () daudzos mīnusos atšķiras. Galvenā atšķirība starp jauno un malloc () ir tā jauns ir operators, ko izmanto kā konstrukciju. No otras puses malloc () ir standarta bibliotēkas funkcija, ko izmanto atmiņas piešķiršanai izpildlaikā. Citas atšķirības starp tām ir apskatītas zemāk salīdzināšanas tabulā:

  1. Salīdzināšanas tabula
  2. Definīcija
  3. Galvenās atšķirības
  4. Secinājums

Salīdzināšanas tabula

Salīdzināšanas pamatsjaunsmalloc ()
ValodaOperators jauns ir īpaša C ++, Java un C # iezīme. Funkcija malloc () ir C iezīme.
Daba"jauns" ir operators.malloc () ir funkcija.
izmērs ()jaunam nav nepieciešams operatora lielums, jo tajā ir pietiekami daudz atmiņas konkrētam tipam malloc pieprasa operatora lielumam zināt, kāds atmiņas lielums tam ir jāpiešķir.
Konstruktors Operators jauns var piezvanīt objekta konstruktoram.malloc () nemaz nevar piezvanīt konstruktoram.
InicializēšanaJaunais operators varētu inicializēt objektu, vienlaikus tam atvēlot atmiņu.Atmiņas inicializēšanu nevarēja veikt malloc.
Pārslodze Operators jaunais var būt pārslogots.Malloc () nekad nevar būt pārslogots.
NeveiksmeJa neizdodas, jaunais operators izņēmums.Ja neizdodas, malloc () atgriež NULL.
NodalīšanaAtmiņas piešķiršana jauniem, darījumiem, kas izvietoti, izmantojot “dzēst”.Atmiņas piešķiršana, izmantojot malloc (), tiek sadalīta, izmantojot funkciju free ().
PārdaleJaunais operators nepārdala atmiņu.Malloc () piešķirto atmiņu var pārdalīt, izmantojot realloc ().
IzpildeOperators jauns saīsina izpildes laiku.Malloc () izpildei nepieciešams vairāk laika.


Jaunā definīcija

Operators jauns ir atmiņas piešķiršanas operators, kas atmiņu piešķir dinamiski. Jaunais operators sadala atmiņā kaudzē un atdod tās atmiņas sākuma adresi, kas piešķirta atsauces mainīgajam. Jaunais operators ir līdzīgs malloc () C. Tomēr C ++ kompilators ir savietojams ar malloc (), taču vislabāk ir izmantot jauno operatoru, jo tam ir noteiktas priekšrocības salīdzinājumā ar malloc (). Jaunā operatora sintakse ir šāda:

tips mainīgais_nosaukums = jauns tips (parametrs_saraksts);

Šeit “tips” apzīmē mainīgā datu tipu, kuram ir jāpiešķir atmiņa. Vārds “mainīgais_nosaukums” ir nosaukums, kas piešķirts atsauces mainīgajam, kurš tur rādītāju atmiņā. Iekavās šeit norādīts konstruktora izsaukums. Parametrs_ saraksts ir to vērtību saraksts, kuras tiek nodotas konstruktoram, lai inicializētu jaunuzcelto objektu.

Jaunais operators piešķir pietiekami daudz atmiņas, kas vajadzīgas noteikta tipa objektam. Tāpēc tam nav vajadzīgs operatora lielums (), kā arī nav nepieciešams mainīt atmiņas izmērus, piemēram, malloc (), kas atmiņas pārdalīšanai izmanto realloc (). Jaunais operators ir konstrukts; tas izsauc objekta konstruktoru, savukārt deklarācija, kuru parasti izmanto objekta inicializēšanai.


Mēs zinām, ka jaunais operators atvēl kaudzē atmiņu un kaudzes lielums ir ierobežots. Tātad, ja kaudzē trūkst atmiņas un jauns operators mēģina atvēlēt atmiņu, tas novedīs pie jaunā operatora kļūmes. Ja jaunajam operatoram neizdodas piešķirt atmiņu, tas izmetīs izņēmumu, un, ja jūsu kods nespēj rīkoties ar šo izņēmumu, programma nepamatoti pārtrauks darbību.

Jaunā operatora piešķirto atmiņu var atbrīvot, izmantojot dzēšanas operatoru. Jaunais operators samazina izpildes laiku, jo tas ir operators, nevis funkcija.

Malloc () definīcija

malloc () ir funkcija, ko izmanto, lai iedalītu pieprasīto atmiņas daudzumu kaudzē. Metode atgriež 'void' tipa rādītāju, kas ir vēl viens, ierakstiet cast, lai rādītāju iegūtu noteikta veida atmiņā, un šis rādītājs atmiņā tiek piešķirts atsauces mainīgajam. Malloc () funkcija ir līdzīga jaunajam operatoram C ++, jo to izmanto atmiņas dinamiskai piešķiršanai. Malloc () ir standarta bibliotēkas funkcija. Funkcijas malloc () sintakse ir šāda:

tips mainīgais_nosaukums = (tips *) malloc (sizeof (tips));

Šeit “tips” norāda mainīgā datu tipu, kuram jāpiešķir atmiņa. Mainīgais_nosaukums ir atsauces mainīgā nosaukums, kuram tiks piešķirts rādītājs, kuru atgriezis malloc (). (Tips *) apraksta veida liešanu, lai iegūtu rādītāju uz atmiņu noteiktā tipā. Sizeof () apraksta malloc (), ka nepieciešamais atmiņas lielums.

Malloc () nepieciešama veida liešana, jo rādītājs, kuru atdod malloc (), ir tukšs, tāpēc, lai rādītājam piešķirtu tipu, ir nepieciešama casting. (Of) lielums ir nepieciešams, jo funkcija malloc () piešķir neapstrādātu atmiņu, tāpēc funkcijai malloc () ir jāpasaka, kāds atmiņas lielums tai jāpiešķir. Ja atvēlētā atmiņa nav pietiekama, to var mainīt vai pārdalīt, izmantojot realloc ().

Funkcija malloc () piešķir atmiņu uz kaudzes. Ja kaudzei trūkst atmiņas, funkcija malloc () atgriež rādītāju NULL. Tāpēc atsauces mainīgais, kas satur rādītāju, kuru atgriezis malloc (), pirms tā izmantošanas ir jāpārbauda, ​​pretējā gadījumā tas var izraisīt sistēmas avāriju.

Funkcijas malloc () atvēlētā atmiņa tiek sadalīta, izmantojot bezmaksas (). Tā kā funkciju izsaukums rada pieskaitāmās vērtības, malloc () izpildei nepieciešams vairāk laika.

  1. Jaunais operators ir konstrukcija, kas ieviesta C ++ un ko izmanto Java, C # utt. No otras puses, malloc () ir standarta bibliotēkas funkcija, kas atrodama tikai C valodā un kuru atbalsta C ++.
  2. Jaunais operators atvēl pietiekami daudz atmiņas noteikta veida objektam, tāpēc nav nepieciešams operatora lieluma noteikšana. No otras puses, funkcijai malloc () operatoram sizeof () ir jāinformē funkcija par to, kāds atmiņas lielums tam jāpiešķir.
  3. Jaunais operators deklarēšanas laikā var piezvanīt objekta konstruktoram. No otras puses, funkcija malloc () nevar izsaukt konstruktoru.
  4. Operators “new” varētu būt pārslogots, bet malloc () nevarēja.
  5. Ja jaunajam operatoram neizdodas atvēlēt atmiņu, tas izņēmumu, kas jārisina ar kodu, pretējā gadījumā programma tiks pārtraukta. No otras puses, funkcija malloc () atgriež rādītāju NULL, ja tam neizdodas atvēlēt atmiņu. Ja rādītājs tiek izmantots, to nepārbaudot, tas izraisa sistēmas avāriju.
  6. Atmiņu, kas piešķirta, izmantojot jaunu operatoru, var sadalīt, izmantojot “dzēst”. No otras puses, atmiņu, kas piešķirta, izmantojot funkciju malloc (), var sadalīt, izmantojot bezmaksas ().
  7. Kad atmiņa ir piešķirta, izmantojot jaunu operatoru, to tik un tā nevar mainīt. No otras puses, atmiņu, kas piešķirta, izmantojot funkciju malloc (), var pārdalīt (mainīt izmērus), izmantojot funkciju realloc ().
  8. Jaunā izpildes laiks ir mazāks nekā malloc (), jo malloc ir funkcija, bet jaunais ir konstrukts.

Secinājums:

Funkcija malloc () ir sens veids, kā dinamiski sadalīt atmiņu. Mūsdienās jauno operatoru izmanto, lai atmiņu piešķirtu izpildlaikā, jo tam ir noteiktas priekšrocības salīdzinājumā ar malloc ().