Sunteți pe pagina 1din 10

Universidad Mariano Glvez de Guatemala

Facultad Ingeniera en sistemas


Programacin I
Seccin E
Lic. Gustavo Adolfo Vides

Memoria Dinmica

Sharling Alejandra Cardona Lpez


5190-14-1576

Villa Nueva, 15 de abril 2016

ASIGNACIN DINMICA DE MEMORIA EN C++


Es memoria que se reserva en tiempo de ejecucin. Su principal ventaja frente a la
esttica, es que su tamao puede variar durante la ejecucin del programa. (En C,
el programador es encargado de liberar esta memoria cuando no la utilice ms). El
uso de memoria dinmica es necesario cuando a priori no conocemos el nmero de
datos/elementos a tratar.

A) Gestin de la memoria:
cada vez que queremos usar una variable debemos reservarle un lugar de la
memoria al comenzar el programa. Debemos indicar al compilador cunta memoria
vamos a usar. Por ejemplo, si hacemos la declaracin:
disco mis_cds[40];

el compilador reserva espacio para 40 cds.


Si en realidad solo queremos guardar datos para 2 cds, se desperdicia mucha
memoria.

Si me encanta la msica, dicho array se me quedar pequeo.

Por tanto, hay ocasiones en las que no sabemos cunta memoria vamos a necesitar
hasta que no se ejecuta el programa. C++ permite poder reservar memoria segn
se va necesitando, es decir, en tiempo de ejecucin. Podremos reservar memoria
para almacenar 2 cds, o reservar memoria para 100 cds si el usuario que ejecuta la
aplicacin es un adicto a la msica: esto lo sabremos en el momento en que se
ejecuta el programa, no antes.
Ventaja de utilizar memoria dinmica:
Los programas aprovecharn mejor la memoria del ordenador en el que se
ejecuten, usando slo lo necesario.

B) Funcin de operador NEW:


C++ proporciona dos operadores para la gestin de memoria:
DIRECCION DE MEMORIA ALTA

New ()

ALMACN
LIBRE

permite reservar memoria


del almacn libre
Delete

()

permite liberar la memoria


cundo no se necesita
DERECCION DE MEMORIA BAJA

MEMORIA

El Operador NEW
El operador new permite reserva un bloque de memoria y devuelve la direccin de
comienzo de dicho bloque. Esta direccin se almacena en un puntero.
<variable puntero>= new <tipo dato>;

Cuando se invoca al operador new, el compilador realiza una comprobacin de


tipos.
char *p = NULL ;
p = new char ;

Si la operacin falla, el operador new, devuelve el puntero nulo NULL. Almacn


ALMACN
LIBRE

999
998
997

=p

101
100

E) Asignacin de memoria para Arrays:

Un array es un conjunto de variables o constantes, todas del mismo tipo, asociadas


a un mismo nombre.
A cada valor individual del array se le denomina elemento del array
Los elementos del array se identifican por el nombre del array junto con los
subndices que definen su posicin dentro del array
Los subndices han de tomar valores enteros y pueden ser positivos, negativos o
ceros
EJEMPLOS:

X5 se representa como X(5).


mat5 3 se representa como mat(5, 3).
Nombrei-3 se representa como Nombre(i-3.).

F) Desbordamiento de memoria: SET_NEW_HANDLER:


La funcin del nuevo- manipulador es una funcin que es llamada por las
funciones de asignacin por defecto (nuevo operador y el operador new [] )
cuando no pueden asignar almacenamiento .
La funcin de nueva gua puede tratar de hacer ms espacio de almacenamiento
disponible para un nuevo intento de asignar el almacenamiento. Si -y slo si- la
funcin tiene xito en hacer ms espacio de almacenamiento disponible, se puede
devolver. De lo contrario, deber lanzar una excepcin, ya sea bad_alloc (o una
clase derivada) o terminar el programa (por ejemplo, llamando a abortar o salida) .
Si los nuevos - manejador devuelve la funcin (es decir, se hacen ms espacio de
almacenamiento disponible) , que puede ser llamado en repetidas ocasiones
durante el tiempo que falla la funcin de asignacin para asignar el
almacenamiento requerido, o hasta que la funcin del nuevo- manipulador no
devuelve o se sustituye .
Antes de esta funcin es llamada por el programa por primera vez, o si new_p es
un nulo -puntos, las funciones de asignacin por defecto tirar directamente
bad_alloc en caso de fallo.

G) Reglas de funcionamientos NEW Y DELETE:


Las reglas siguientes restringen la forma en que se implementan los operadores
sobrecargados. Sin embargo, no se aplican a los operadores new ydelete, que se
tratan por separado.

No se pueden definir operadores nuevos, por ejemplo **.


No se puede volver a definir el significado de los operadores cuando se
aplican a los tipos de datos integrados.
Los operadores sobrecargados deben ser una funcin miembro de clase no
esttica o una funcin global. Una funcin global que necesita acceso a
miembros de clase privados o protegidos se debe declarar como friend de
esa clase. Una funcin global debe tomar al menos un argumento que sea
de clase o de tipo enumerado, o que sea una referencia a una clase o a un
tipo
Por ejemplo:
//enumerado.
rules_for_operator_overloading.cpp
class Point
{
public:
Point operator<( Point & );
operator

// Declare a member

// overload.
// Declare addition operators.
friend Point operator+( Point&, int );
friend Point operator+( int, Point& );
};
int main()
{
}

En el ejemplo de cdigo anterior se declara el operador "menos que" como


funcin miembro; sin embargo, los operadores de suma se declaran como
funciones globales con acceso de confianza. Observe que se puede
proporcionar ms de una implementacin para un operador determinado.
En el caso del operador de suma anterior, las dos implementaciones se
proporcionan para facilitar la propiedad conmutativa. Tambin es probable
que puedan implementarse operadores que
agregan Point a Point, int a Point, etc.

Los operadores obedecen a la prioridad, la agrupacin y el nmero de


operandos dictados por su uso tpico con los tipos integrados.Por
consiguiente, no hay ninguna forma de expresar el concepto "sumar 2 y 3 a
un objeto de tipo Point" con la expectativa de que 2 se sume a la
coordenada X y 3 se sume a la coordenada Y.

Los operadores unarios declarados como funciones miembros no toman


ningn argumento; si se declaran como funciones globales, toman un
argumento.
Los operadores binarios declarados como funciones miembros toman un
argumento; si se declaran como funciones globales, toman dos
argumentos.
Si un operador puede utilizarse como operador unario u operador binario
(&, *, + y -), se puede sobrecargar cada uso por separado.
Los operadores sobrecargados no pueden tener argumentos
predeterminados.
Las clases derivadas heredan todos los operadores sobrecargados,
excepto el de asignacin (operator=).
El primer argumento para los operadores sobrecargados de funcin
miembro siempre es del tipo de clase del objeto para el que se invoca el
operador (la clase en la que se declara el operador o una clase derivada de
ella). No se proporciona ninguna conversin para el primer argumento.
Observe que el significado de cualquiera de los operadores se puede cambiar por
completo. Esto incluye el significado de los operadores address-of (&), de
asignacin (=) y de llamada a funcin. Adems, las identidades en las que se
puede confiar para los tipos integrados pueden cambiarse mediante la sobrecarga
de operadores. Por ejemplo, las cuatro instrucciones siguientes suelen ser
equivalentes cuando se evalan completamente:

var = var + 1;
var += 1;
var++;
++var;
No se puede confiar en esta identidad para los tipos de clase que sobrecargan
operadores. Adems, algunos requisitos implcitos en el uso de estos operadores
para los tipos bsicos se relajan para los operadores sobrecargados. Por ejemplo,
el operador de suma o asignacin, +=, requiere que el operando izquierdo sea un
valor L cuando se aplica a los tipos bsicos; este requisito no existe cuando se
sobrecarga el operador.

S-ar putea să vă placă și