Kako delati z dinamično dodelitvijo pomnilnika C ++?



Ta članek raziskuje dinamično dodeljevanje pomnilnika v jeziku C ++, pomembno funkcijo, ki vam omogoča, da upoštevate potrebe po pomnilniku v realnem času.

Dinamično dodeljevanje pomnilnika V jeziku C ++ je zelo pomembna funkcija, ki vam omogoča, da upoštevate svoje zahteve, da se spoprimete s potrebo po virih v realnem času. V tem članku bi raziskovali Podrobno raziskovanje. V tem članku bodo zajeti naslednji napotki:

Začnimo s tem člankom o dinamičnem dodeljevanju pomnilnika v jeziku C ++





Potrebujete dinamično dodeljevanje pomnilnika?

Recimo, da želimo vnesti stavek kot niz znakov, vendar nismo prepričani o natančnem številu znakov, ki jih zahteva polje.

Zdaj, ko določimo polje znakov, če določimo njegovo velikost, manjšo od velikosti želenega niza, bomo dobili napako, ker je prostor v pomnilniku, dodeljenem matriki, manjši od velikosti vhodnega niza. Če določimo njegovo velikost večjo od velikosti vhodnega niza, bo matriki dodeljen prostor v pomnilniku, ki je veliko večji od velikosti želenega niza, s čimer se po nepotrebnem porabi več pomnilnika, tudi kadar ni potreben.



V zgornjem primeru do trenutka prevajanja (ko računalnik prevede kodo in niz vnese uporabnik) nimamo ideje o natančni velikosti polja. V takih primerih uporabljamo novo operater.

C ++ definira dva enotna operaterja novo in izbriši ki opravljajo nalogo dodeljevanja in sproščanja pomnilnika med izvajanjem. Ker ti operaterji (novi in ​​izbrisani) delujejo na pomnilniku proste shrambe (Heap memory), se jim reče tudi operater proste trgovine. Kazalci nudijo potrebno podporo za sistem za dinamično dodeljevanje pomnilnika v jeziku C ++.

S pomočjo dinamičnega dodeljevanja lahko program med izvajanjem pridobi pomnilnik.



Globalna in lokalna spremenljivka sta v času prevajanja dodeljena pomnilniku. Vendar med izvajanjem ne moremo dodati nobene globalne ali lokalne spremenljivke. Če mora program uporabiti spremenljivo količino pomnilnika, bi morali dodeliti pomnilnik med izvajanjem, po potrebi. In seveda, tukaj lahko rutine za dinamično dodeljevanje služijo temu namenu.

Razlike med statično dodelitvijo pomnilnika in dinamično dodelitvijo pomnilnika:

To je osnovna arhitektura pomnilnika, ki se uporablja za kateri koli program C ++:

Pomnilnik - Dinamično dodeljevanje pomnilnika - Edureka

Takšno podobo bomo potrebovali

Sklop se uporablja za statično dodeljevanje pomnilnika, kopica pa za dinamično dodeljevanje pomnilnika, oba sta shranjena v RAM-u računalnika.

Spremenljivke, ki se dodelijo v sklad, medtem ko je dodelitev statičnega pomnilnika shranjena neposredno v pomnilnik, dostop do tega pomnilnika pa je zelo hiter, prav tako je njegova dodelitev obravnavana, ko je program preveden. Ko funkcija ali metoda pokliče drugo funkcijo, ki lahko nato pokliče drugo funkcijo in tako naprej, izvajanje vseh teh funkcij ostane začasno ustavljeno, dokler zadnja funkcija ne vrne svoje vrednosti. Sklad je vedno shranjen v vrstnem redu LIFO (zadnji v prvem odhodu), zadnji rezerviran blok je vedno naslednji blok, ki se sprosti. To pomaga spremljati sklad, saj sprostitev bloka iz sklada ni nič drugega kot prilagajanje enega kazalca.

Spremenljivkam, dodeljenim na kopici, se njihov pomnilnik dodeli med izvajanjem med dinamičnim dodeljevanjem pomnilnika. Dostop do tega pomnilnika je nekoliko počasnejši v primerjavi s skladom, vendar je velikost kupa omejena le z velikostjo navideznega pomnilnika. Element kupa ni medsebojno odvisen in je do njega lahko kadar koli dostopen naključno. Blok lahko dodelimo kadar koli in ga kadar koli osvobodimo. To otežuje sledenje, kateri deli kupa so v določenem trenutku dodeljeni ali odstranjeni.

Nadaljujemo s tem člankom o dinamičnem dodeljevanju pomnilnika v jeziku C ++

Dodelitev pomnilnika z uporabo novo Ključna beseda

V jeziku C ++ je novo operator se uporablja za dodelitev pomnilnika med izvajanjem in pomnilnik je dodeljen v bajtih. The novo operator označuje zahtevo za dinamično dodeljevanje pomnilnika na kopici. Če je na voljo dovolj pomnilnika, potem novo operator inicializira pomnilnik in vrne naslov novo dodeljenega in inicializiranega pomnilnika na spremenljivko kazalca.

razlika med jquery in javascript

Sintaksa:

podatkovni tip * pointer_name = nov podatkovni tip

Primer:

int * ptr = new int // Spremenljivko lahko med dinamičnim dodeljevanjem razglasimo na dva načina. int * ptr = novo int (10) int * ptr = novo int {15} // novi operator se uporablja tudi za dodelitev bloka (polja) pomnilnika tipa podatkovnega tipa. int * ptr = new int [20] // Zgornji stavek dinamično dodeli pomnilnik za 20 celih števil neprekinjeno tipa int in vrne kazalec na prvi element zaporedja na kazalec 'ptr'.

Opomba : Če kup nima dovolj pomnilnika za dodeljevanje, nova zahteva nakazuje neuspeh, tako da vrže izjemo std :: bad_alloc, razen če je z novim operaterjem uporabljeno “nothrow”, v tem primeru vrne kazalec NULL. Zato je dobra praksa, da pred uporabo v programu preverite spremenljivko kazalca, ki jo ustvari new.

Nadaljujemo s tem člankom o dinamičnem dodeljevanju pomnilnika v jeziku C ++

Prenos pomnilnika z uporabo izbriši Ključna beseda:

Ko je kup pomnilnika dodeljen spremenljivki ali predmetu razreda z uporabo novo ključno besedo, lahko sprostimo ta pomnilniški prostor s pomočjo izbriši ključna beseda.

Sintaksa:

delete pointer_variable // Tu je pointer_variable kazalec, ki kaže na podatkovni objekt, ustvarjen z new. delete [] pointer_variable // Za sprostitev dinamično dodeljenega pomnilnika polja, na katerega kaže pointer-variable, uporabimo naslednjo obliko delete:

Primer:

delete ptr delete [] ptr

Opomba : Obseg predmeta ali življenjska doba predmeta je čas, za katerega objekt ostane v pomnilniku med izvajanjem programa. Dodelitev kopice pomnilnika je počasnejša od sklada, saj v kopici ni posebnega vrstnega reda, po katerem bi lahko dodelili pomnilnik, medtem ko v nizu sledi LIFO.

Nadaljujemo s tem člankom o dinamičnem dodeljevanju pomnilnika v jeziku C ++

Dinamično dodeljevanje nizov

Koncept dinamičnega dodeljevanja pomnilnika je glavna uporaba pri dodeljevanju pomnilnika matriki, ko jo moramo prijaviti z določitvijo njegove velikosti, vendar o tem nismo prepričani.

Poglejmo, primer za razumevanje njegove uporabe.

#include z uporabo imenskega prostora std int main () {int len, sum = 0 cout<< 'Enter the no. of students in the class' <>len int * marks = new int [len] // Dinamično dodeljevanje pomnilnika cout<< 'Enter the marks of each student' << endl for( int i = 0 i>* (oznake + i)} za (int i = 0 i

Pojasnilo:
V tem primeru najprej uporabnika prosimo za število učencev v razredu in njegovo vrednost shranimo v spremenljivko len. Nato deklariramo celo celo število in mu damo prostor v pomnilniku, ki je dinamično enak vrednosti, shranjeni v spremenljivki len, s pomočjo tega stavka int * marks = new int [length], zato mu je dodeljen prostor, enak 'length * (velikost 1 celo število) '. Preostala koda je samoumevna.

Nadaljujemo s tem člankom o dinamičnem dodeljevanju pomnilnika v jeziku C ++

Dinamično dodeljevanje pomnilnika za predmete

Predmete lahko tudi dinamično dodelimo.

java razlika med izvedbami in razširitvami

Kot vemo, da je Constructor posebna funkcija člana razreda, ki se uporablja za inicializacijo predmeta, in Destructor pa je tudi funkcija člana razreda, ki se pokliče vsakič, ko objekt izstopi iz obsega.

Destructor je mogoče uporabiti za sprostitev pomnilnika, dodeljenega predmetu. Kliče se v naslednjih pogojih.

  • Ko lokalni objekt izstopi iz obsega
  • Za globalni objekt, ko je operator uporabljen za kazalec na predmet razreda

Pri dinamičnem dodeljevanju pomnilnika objektom lahko spet uporabimo kazalce.

Poglejmo primer nabora predmetov.

#include z uporabo imenskega prostora std class Random {public: Random () {cout<< 'Constructor' << endl } ~Random() { cout << 'Destructor' << endl } } int main() { Random* a = new Random[3] delete [] a // Delete array return 0 } 

Izhod:

Pojasnilo:

Konstruktor bo poklican trikrat, saj pomnilnik dodeljujemo trem objektom razreda Random. Med vsakim od teh objektov bo trikrat poklican tudi Destructor. 'Random * a = new Random [3]' je ta stavek odgovoren za dinamično dodeljevanje pomnilnika našega predmeta.

Tako smo prišli do konca tega članka o 'Dinamičnem dodeljevanju pomnilnika C ++'. Če želite izvedeti več, si oglejte Edureka, zaupanja vredno podjetje za spletno učenje. Edurekin tečaj za usposabljanje in certificiranje Java J2EE in SOA je zasnovan tako, da vas usposobi za temeljne in napredne koncepte Java, skupaj z različnimi Java okviri, kot sta Hibernate & Spring.

Imate vprašanje za nas? Prosimo, omenite to v oddelku za komentarje tega spletnega dnevnika, mi pa se vam bomo javili v najkrajšem možnem času.