Com es pot treballar amb l'assignació dinàmica de memòria C ++?



Aquest article explora l'assignació de memòria dinàmica a C ++, una característica important que us permet considerar les necessitats de memòria de recursos en temps real.

L’assignació dinàmica de memòria a C ++ és una característica molt important que us permet considerar els vostres requisits per fer front a la necessitat de recursos en temps real. En aquest article estaríem explorant Exploració detallada. Els següents indicadors es tractaran en aquest article,

Comencem, doncs, amb aquest article sobre Assignació dinàmica de memòria en C ++





Necessiteu assignació de memòria dinàmica?

Per exemple, volem introduir una frase com a matriu de caràcters, però no estem segurs del nombre exacte de caràcters que es requereixen a la matriu.

Ara, mentre declarem la matriu de caràcters, si especifiquem la seva mida menor que la mida de la cadena desitjada, obtindrem un error perquè l’espai de la memòria assignat a la matriu és menor en comparació amb la mida de la cadena d’entrada. Si especifiquem la seva mida més gran que la mida de la cadena d’entrada, a la matriu se li assignarà un espai a la memòria molt més gran que la mida de la cadena desitjada, de manera que es consumeix innecessàriament més memòria fins i tot quan no sigui necessària.



En el cas anterior, no tenim la idea de la mida exacta de la matriu fins al temps de compilació (quan l’ordinador compila el codi i l’usuari introdueix la cadena). En aquests casos, fem servir el fitxer nou operador.

C ++ defineix dos operadors unaris nou i esborrar que realitzen la tasca d'assignació i distribució de memòria durant l'execució. Atès que aquests operadors (nous i suprimits) funcionen amb memòria de magatzem lliure (memòria Heap), també s’anomenen operador de botiga lliure. Els indicadors proporcionen el suport necessari per al sistema d’assignació de memòria dinàmica en C ++.

Amb l'ajut de Dynamic Allocation, un programa pot obtenir memòria durant el temps d'execució.



Les variables locals i globals s’assignen a la memòria durant el temps de compilació. Tot i això, no podem afegir cap variable global ni local durant el temps d’execució. Si el programa ha d'utilitzar una quantitat variable de memòria, hauríem d'assignar memòria durant el temps d'execució, quan i quan sigui necessari. I, per descomptat, aquí les rutines d’assignació dinàmica poden complir l’objectiu.

què és * en sql

Diferències entre l'assignació de memòria estàtica i l'assignació dinàmica de memòria:

Aquesta és una arquitectura de memòria bàsica que s’utilitza per a qualsevol programa C ++:

Memòria - Assignació dinàmica de memòria - Edureka

Necessitarem una imatge com aquesta

La pila s’utilitza per a l’assignació de memòria estàtica i Heap per a l’assignació dinàmica de memòria, tots dos s’emmagatzemen a la memòria RAM de l’ordinador.

Les variables que s’assignen a la pila mentre l’assignació de memòria estàtica s’emmagatzema directament a la memòria i l’accés a aquesta memòria és molt ràpid, també s’ocupa de la seva assignació quan es compila el programa. Quan una funció o un mètode crida a una altra funció que al seu torn pot cridar a una altra funció, etc., l'execució de totes aquestes funcions roman suspesa fins que l'última funció retorni el seu valor. La pila sempre s’emmagatzema en un ordre LIFO (darrer en primer sortida), el bloc reservat més recent sempre és el següent bloc que s’allibera. Això ajuda a fer un seguiment de la pila, alliberar un bloc de la pila no és més que ajustar un punter.

Les variables assignades a l'emmagatzematge dinàmic tenen la seva memòria assignada en temps d'execució mentre que l'assignació dinàmica. L'accés a aquesta memòria és una mica més lent en comparació amb la pila, però la mida de l'emmagatzematge dinàmic només està limitada per la mida de la memòria virtual. L'element del munt no té dependències entre si i sempre es pot accedir a l'atzar en qualsevol moment del temps. Podem assignar un bloc en qualsevol moment i alliberar-lo en qualsevol moment. Això fa que sigui difícil fer un seguiment de quines parts del munt s’assignen o es reparteixen en cada moment.

Continuem amb aquest article sobre Assignació dinàmica de memòria en C ++

Assignació de memòria mitjançant nou Paraula clau

A C ++ el fitxer nou L'operador s'utilitza per assignar memòria en temps d'execució i la memòria s'assigna en bytes. El nou L'operador indica una sol·licitud d'assignació de memòria dinàmica a l'emmagatzematge dinàmic. Si hi ha prou memòria disponible, el fitxer nou L'operador inicialitza la memòria i retorna l'adreça de la memòria recentment assignada i inicialitzada a la variable de punter.

Sintaxi:

tipus de dades * pointer_name = tipus de dades nou

Exemple:

int * ptr = new int // Podem declarar una variable mentre que l'assignació dinàmica de les dues maneres següents. int * ptr = new int (10) int * ptr = new int {15} // també s'utilitza un nou operador per assignar un bloc (una matriu) de memòria de tipus data-type. int * ptr = new int [20] // La sentència anterior assigna dinàmicament memòria de 20 enters contínuament de tipus int i retorna un punter al primer element de la seqüència al punter ‘ptr’.

Nota : Si l’emmagatzematge dinàmic no té prou memòria per assignar-la, la nova sol·licitud indica un error en llançar una excepció std :: bad_alloc, tret que s’utilitzi “nothrow” amb el nou operador, en aquest cas retorna un punter NULL. Per tant, és una bona pràctica comprovar la variable de punter produïda per new abans d’utilitzar-la al programa.

Continuem amb aquest article sobre Assignació dinàmica de memòria en C ++

Deslocalització de la memòria mitjançant esborrar Paraula clau:

Un cop assignada la memòria dinàmica a una variable o objecte de classe mitjançant el fitxer nou paraula clau, podem distribuir aquest espai de memòria mitjançant el fitxer esborrar paraula clau.

Sintaxi:

delete pointer_variable // Aquí, pointer_variable és el punter que apunta a l'objecte de dades creat per new. delete [] pointer_variable // Per alliberar la memòria de matriu assignada dinàmicament apuntada per pointer-variable, fem servir la forma següent de suprimir:

Exemple:

delete ptr delete [] ptr

Nota : L'extensió de l'objecte o la vida útil de l'objecte és el temps durant el qual l'objecte roman a la memòria durant l'execució del programa. L'assignació de memòria en pila és més lenta que una pila, ja que, en pila, no hi ha cap ordre particular en què es pugui assignar memòria mentre que a la pila segueix LIFO.

Continuem amb aquest article sobre Assignació dinàmica de memòria en C ++

Assignació dinàmica de matrius

L’ús principal del concepte d’assignació de memòria dinàmica és assignar memòria a una matriu quan hem de declarar-la especificant-ne la mida, però no n’estem segurs.

Vegem, un exemple per entendre’n l’ús.

#include using namespace std int main () {int len, sum = 0 cout<< 'Enter the no. of students in the class' <>len int * marks = new int [len] // Cout d'assignació dinàmica de memòria<< 'Enter the marks of each student' << endl for( int i = 0 i>* (marca + i)} per a (int i = 0 i

Explicació:
En aquest exemple primer demanem a l’usuari el nombre d’alumnes d’una classe i guardem el seu valor a la variable len. A continuació, declarem una matriu d'enters i l'assignem dinàmicament espai a la memòria igual al valor emmagatzemat a la variable len mitjançant aquesta sentència int * marks = new int [length] per la qual cosa se li assigna un espai igual a 'length * (mida 1) enter)'. La resta del codi s’explica per si mateix.

Continuem amb aquest article sobre Assignació dinàmica de memòria en C ++

Assignació de memòria dinàmica per a objectes

També podem assignar objectes de forma dinàmica.

Com sabem, Constructor és una funció de membre de classe especial que s’utilitza per inicialitzar un objecte i Destructor també és una funció de membre de classe que s’anomena sempre que l’objecte surt de l’abast.

Destructor es pot utilitzar per alliberar la memòria assignada a l'objecte. Es diu en les següents condicions.

  • Quan un objecte local surt de l'abast
  • Per a un objecte global, quan s'aplica un operador a un punter a l'objecte de la classe

Podem tornar a utilitzar punteres mentre assignem dinàmicament memòria a objectes.

Vegem un exemple d’un conjunt d’objectes.

#include using namespace 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 } 

Sortida:

Explicació:

Es cridarà al constructor tres vegades ja que assignem memòria a tres objectes de la classe Random. També es cridarà al Destructor tres vegades durant cadascun d’aquests objectes. 'Random * a = new Random [3]', aquesta afirmació és responsable de l'assignació dinàmica de memòria del nostre objecte.

Així hem arribat al final d’aquest article sobre ‘Dynamic Memory Allocation C ++’. Si voleu obtenir més informació, consulteu el per Edureka, una empresa d’aprenentatge en línia de confiança. El curs de formació i certificació Java J2EE i SOA d’Edureka està dissenyat per formar-vos tant per a conceptes bàsics com avançats de Java, juntament amb diversos marcs Java com Hibernate & Spring

Tens alguna pregunta? Si us plau, mencioneu-lo a la secció de comentaris d’aquest bloc i us respondrem el més aviat possible.

sal vs xef contra titella