SlideShare una empresa de Scribd logo
1 de 53
Descargar para leer sin conexión
Administración de
   Memoria
    Apoyo SSD5
Apuntadores
Un apuntador es una variable que
almacena la dirección de la memoria de
otra variable.
La variable apuntador es única ya que
salva la dirección de la memoria de otra
variable
La dirección de memoria es la localización
específica en la memoria principal donde
existe una variable durante la ejecución de
un programa
                 Mtl. Lourdes Cahuich     2
Apuntadores
Se usan apuntadores para acceder y
manipular indirectamente otras variables.
La quot;indirecciónquot; permite la creación de las
estructuras de datos complejas y
algoritmos poderosos.
Por ejemplo, sin apuntadores e indirección
no sería posible crear una estructura de
datos de la lista encadenada.
                 Mtl. Lourdes Cahuich     3
Operaciones Básicas
Declaración e Inicialización
  La declaración de una variable apuntador
  requiere el uso de cierta sintaxis
  desconocida.
  Una declaración del apuntador debe prefijar
  su nombre de variable con un asterisco (*),
  esto significa para el compilador que la
  variable declarada es un apuntador


                  Mtl. Lourdes Cahuich          4
Operaciones Básicas
Aunque los apuntadores solamente
almacenan direcciones de la memoria, la
declaración de una variable apuntador
debe especificar un tipo de datos
específico cuya dirección de memoria
pueda almacenar el apuntador; esto es
indispensable para poder manipular la
variable indirectamente

                Mtl. Lourdes Cahuich      5
Operaciones Básicas
La inicialización requiere sintaxis nueva;
para esto se requiere obtener a dirección
de memoria de la variable.
El operador address-of (&) regresa la
dirección de la memoria de donde está
almacenada la variable



                 Mtl. Lourdes Cahuich        6
De-referenciar (Dereference)
El acceso indirecto y la manipulación de
variables usando apuntadores se logra
usando el operador de-reference.
Se aplica el operador de-reference (*)
para acceder o modificar el valor de la
variable señalada por un apuntador.



                 Mtl. Lourdes Cahuich      7
De-referenciar
Los programadores pueden invocar
funciones miembro de un objeto a través
de un apuntador.
El operador de la flecha (->) primero de-
referencia el apuntador y en seguida
invoca la función miembro nombrada.



                 Mtl. Lourdes Cahuich       8
De-referenciar
Solamente podemos de-referenciar de
forma segura los apuntadores que
señalan hacia direcciones válidas de
memoria.
De-referenciar apuntadores que no se han
inicializado a direcciones de memoria
válidas causan un error de ejecución.


                Mtl. Lourdes Cahuich   9
Una técnica utilizada para evitar este
problema es la inicialización de variables
apuntador al puntero nulo.
El puntero nulo representa un lugar en la
memoria que no puede ser de-
referenciado.
Esto evita que una de-referenciación
accidental pueda causar un error de
ejecución
                 Mtl. Lourdes Cahuich        10
El apuntador nulo es referenciado usando
la macro NULL
También se usan apuntadores nulos como
valores para indicar el fin de alguna
estructura o secuencia.




                Mtl. Lourdes Cahuich   11
Aritmética del Apuntador
La aritmética del apuntador es el uso de
sumas y restas para cambiar la posición
de memoria que un apuntador almacena.
Estas operaciones son concernientes a la
posición de la memoria actualmente
almacenada en un apuntador
Si se agrega o resta un número de
memoria incluyendo el tamaño requerido
por el tipo de dato
                Mtl. Lourdes Cahuich       12
Aritmética del Apuntador
C++ realiza esta multiplicación de
memoria automática
La aritmética del apuntador es una forma
de acceder diferentes posiciones en una
estructura de datos
La aritmética del apuntador tiene muchos
usos uno de ellos es el recorrido de
arreglos (traversal of arrays).
                Mtl. Lourdes Cahuich       13
Mecanismos de paso de
          parámetros
Paso de Parámetros por Valor
  El paso de parámetros por valor es el
  mecanismo default de paso de parámetros en
  C++, se crea y se entrega una copia del
  parámetro a la función
  Esto es importante, debido a que si
  realizamos un cambio a un parámetro que
  sea pasado por valor, la variable original
  permanece sin cambios ya que éstos se
  realizan en una copia de la variable original

                  Mtl. Lourdes Cahuich        14
Paso de Parámetros por
           Referencia
A diferencia del paso de parámetros por
valor, no se hacen copias de las variables
que son pasadas por referencia.
En su lugar, una función llamada recibe
una referencia, o alias, al parámetro real
provisto por la función llamada.
Por esta razón, el paso por referencia se
utiliza para construir funciones que
pueden modificar las variables en la
función llamada
                 Mtl. Lourdes Cahuich        15
Mecanismos de paso de
          parámetros
La sintaxis del paso de parámetros por
referencia se declara incluyendo el prefijo
& en la declaración del parámetro a recibir
Aquí el signo quot;" señala al compilador que
este parámetro debe ser pasado por
referencia



                 Mtl. Lourdes Cahuich     16
Mecanismos de paso de
         parámetros
El paso de un parámetro por referencia
también se utiliza como mecanismo para
pasar objetos grandes a las funciones.
Cuando los objetos son grandes, el paso
por valor puede dar lugar a operaciones
que consumen demasiado tiempo al sacar
copias.


               Mtl. Lourdes Cahuich   17
Mecanismos de paso de
         parámetros
El paso por referencia es más eficiente
porque no implica el sacar copias.
Incluso cuando una función no intenta
modificar uno de sus parámetros, se debe
usar el paso por referencia cuando el
parámetro es un objeto grande



                Mtl. Lourdes Cahuich   18
Mecanismos de paso de
         parámetros
A veces es útil pasar un apuntador por
referencia.
Esto se hace cuando una función necesita
cambiar la posición almacenada de
memoria del apuntador.
Es decir se pasa un apuntador a una
función por referencia cuando la función
necesita reposicionar el apuntador.
                Mtl. Lourdes Cahuich   19
Mecanismos de paso de
          parámetros
Un error que comúnmente se comete al
regresar por referencia, es regresar una
referencia a una variable local.
El ciclo de vida de una variable local
termina cuando la función en la que la
variable esta definida se termina de
ejecutar.


                 Mtl. Lourdes Cahuich      20
Mecanismos de paso de
         parámetros
Regresar una referencia a algo que ya no
existe puede generar resultados
inesperados.




                Mtl. Lourdes Cahuich       21
Administración de la Memoria
           Dinámica
El Almacén Libre
  Cada programa de C++ tiene lo que se llama
  el quot;almacén librequot;.
  El almacén libre, que a veces se le llama
  quot;heapquot; es un área de la memoria de un
  programa que se utiliza dinámicamente




                 Mtl. Lourdes Cahuich          22
Administración de la Memoria
           Dinámica
Usar memoria dinámicamente significa
que la cantidad de memoria requerida
para una tarea es especificada en el
tiempo de ejecución, en lugar del tiempo
de compilación
Las variables creadas en el almacén libre
tienen dimensión dinámica.


                Mtl. Lourdes Cahuich        23
Administración de la Memoria
           Dinámica
La dimensión de una variable describe
cuánto tiempo permanece la variable
alrededor en un programa
Las variables locales en funciones tienen
dimensión local, se crean cuando se llama
una función y se destruyen cuando la
función regresa.


                Mtl. Lourdes Cahuich    24
Administración de la Memoria
           Dinámica
Las variables globales, que tienen
dimensión estática son creadas y están
disponibles a través del ciclo de vida
completo de un programa.
Una variable con dimensión dinámica
tiene su ciclo de vida especificado
explícitamente por el programador.


                Mtl. Lourdes Cahuich     25
Asignación de Memoria
El proceso de obtener memoria del
almacén libre es llamado asignación de
memoria.
El operador new es usado en C++ para
asignar memoria dinámicamente.

// Allocate a single integer
int* ptr = new int;

                Mtl. Lourdes Cahuich     26
Asignación de Memoria
El operador new siempre regresa una
dirección de memoria.
Recuerda, los apuntadores almacenan
direcciones de memoria, por lo que
nosotros debemos guardar el valor de
regreso del operador new en el apuntador
El operador new sirve para todos los tipos
de datos
                 Mtl. Lourdes Cahuich    27
Asignación de Memoria
  Usando un apuntador, podemos tener
  acceso indirectamente y modificar la
  variable que acabamos de crear.

// Allocate a single integer
int* ptr = new int;
*ptr = 10;cout << quot;Address: quot; << ptr << endl;
cout << quot;Value: quot; << *ptr << endl;

                      Mtl. Lourdes Cahuich      28
Asignación de Memoria
Los objetos también pueden ser
asignados dinámicamente.
El operador new, además de asignar la
memoria para un objeto, llamará un
constructor para el objeto




                Mtl. Lourdes Cahuich    29
#include <iostream>
#include <cstdlib>
using namespace std;
class my_class {
private:
         int x;
public:
        my_class() : x(0) {}
        my_class(int p) : x(p) {}
        int value() { return x;}
};
int main(int argc, char* argv[]) {
    // Allocate a single object
   my_class* ptr1 = new my_class(4);
    // Allocate an array of objects
    my_class* ptr2 = new my_class[10];
    cout << ptr1->value() << endl;
    cout << ptr2->value() << endl;
    return EXIT_SUCCESS;
}                    Mtl. Lourdes Cahuich   30
Liberación de Memoria
El operador delete libera la memoria
asignada usando el operador new.
Para liberar, o desasignar memoria, el
operador delete necesita conocer qué
posición en la memoria deseamos liberar.
Para este fin, le proporcionamos un
apuntador, que en realidad es sólo la
posición que obtuvimos del operador new
                Mtl. Lourdes Cahuich       31
// Dynamically allocate a variable.

double* ptr1 = new double;

// ... use the variable ...

// The variable is no longer needed,

// so we return its memory to the Free Store.


delete ptr1;
                  Mtl. Lourdes Cahuich     32
Liberación de Memoria
Existe una sintaxis especial para ser
usada por el operador delete al liberar
arreglos.
La palabra reservada delete es seguida
por el operador ([]).
Esto señala al ambiente de ejecución que
lo que el operador delete debe liberar es
en realidad un arreglo, no solo una
variable.
                Mtl. Lourdes Cahuich    33
Constructores Copy
Un constructor copy define las acciones
que necesitan tomarse para crear una
copia de un objeto.
A diferencia de los constructores
regulares, una clase puede contener solo
un constructor copy.



                Mtl. Lourdes Cahuich       34
Constructores Copy
Si una clase de C++ no define un
constructor copy, el lenguaje provee a la
clase un constructor copy por default.
Este constructor copy por default hace
una copia byte por byte del objeto




                 Mtl. Lourdes Cahuich       35
Constructores Copy
Los constructores copy son invocados cuando
se requiere hacer una copia de un objeto.
Existen tres situaciones cuando se hacen
copias de objetos.
1.   Durante una declaración que involucre inicialización
2.   Cuando los objetos son transmitidos por valor
3.   Cuando los objetos son regresados por valor




                       Mtl. Lourdes Cahuich             36
Constructores Copy
Usar el constructor copy default provisto
por el sistema puede ser peligroso en un
programa que usa le memoria dinámica.
Pueden surgir situaciones donde dos o
más objetos mantienen incorrectamente
apuntadores a los mismos datos.



                 Mtl. Lourdes Cahuich       37
Constructores Copy
El constructor por default, en el caso de
tener apuntadores, copiará los punteros,
no a lo que apuntan “copia superficial”
El opuesto de una copia superficial es una
copia profunda, o quot;deep copyquot;.




                Mtl. Lourdes Cahuich     38
class Array {
private:
    int *ptr;
public:
    Array(void) : ptr(new int[10]) {}
    Array(const Array& src) {
        cout << quot;Copy Constructor Invoked!nquot;;
        ptr = new int[10];
        for (int i = 0; i < 10; i++) {
           ptr[i] = src.ptr[i];
        }
    }
    ~Array(void) {delete ptr;}



                     Mtl. Lourdes Cahuich    39
Constructores Copy
Un constructor copy puede ser usado para
asegurar la creación de una copia
profunda en un objeto.
El listado anterior contiene un constructor
copy para la clase Array.
Este constructor copy asigna un nuevo
arreglo en la memoria y copia en ella los
valores del arreglo fuente.
                 Mtl. Lourdes Cahuich     40
Errores Comunes
La regla básica para tratar con la
asignación dinámica y la desasignación o
liberación del espacio es directa: para
cada llamada a new (que consume
memoria), debe haber una llamada
correspondiente a delete (que libera
memoria).


                Mtl. Lourdes Cahuich       41
Errores Comunes
Es importante pensar cuidadosamente y
con anticipación donde y cuando la
memoria debe ser asignada y liberada.
No asignes memoria al azar a través del
código o dentro de funciones anidadas,
porque esto hace difícil mantener un
registro de esas asignaciones.


                Mtl. Lourdes Cahuich      42
Errores Comunes
En general, los errores referentes a la
asignación de memoria dinámica son
difíciles de tratar, y es mejor evitarlos
desde el principio




                  Mtl. Lourdes Cahuich      43
Agotamiento de la Memoria
Si nunca se utiliza delete, y se continúa
haciendo llamadas a new, el sistema en
última instancia fallará cuando se quede
sin memoria en el almacén libre.
Los bugs o fallas de funcionamiento son
llamadas quot;memory leaksquot; o agotamiento
de la memoria y pueden ser muy difíciles
de descubrir.

                Mtl. Lourdes Cahuich        44
Agotamiento de la Memoria
Una característica insidiosa de los
agotamientos de la memoria es que
conducen a caídas aparentemente al azar
y fallas irreproducibles.




               Mtl. Lourdes Cahuich   45
Sobreescritura
Al tratar con los apuntadores en C++, es
fácil a menudo sobrescribir la memoria.
Las sobre escrituras son especialmente
molestas al usar memoria dinámica.
Esto es porque una sobre escritura en el
heap daña la información usada para
administrar la memoria dinámica.


                Mtl. Lourdes Cahuich       46
Sobreescritura
Las sobreescritura también son difíciles de
detectar debido a que por lo general no
causan un error inmediatamente.
Una sobreescritura puede hacer que el
programa falle después, en alguna otra
sección del código



                 Mtl. Lourdes Cahuich     47
Sobreescritura
Peor aún, el programa puede no fallar del
todo, y continuar ejecutándose con ciertos
datos corruptos




                 Mtl. Lourdes Cahuich    48
Uso de la Memoria Liberada
Otro error común con respecto a la
memoria dinámica es referenciar la
memoria que ya ha sido liberada.
Nunca es seguro utilizar un apuntador
cuya posición de memoria almacenada se
ha liberado usando delete



               Mtl. Lourdes Cahuich   49
Uso de la Memoria Liberada
El operador delete, por razones de
eficiencia, no limpia el contenido de la
memoria que libera.
Esto significa que existe la posibilidad de
que la memoria todavía pueda contener
datos válidos, tiempo después de que se
haya liberado espacio.


                 Mtl. Lourdes Cahuich         50
Uso de la Memoria Liberada
No hay garantía de esto, sin embargo, la
memoria en cuestión podría ser
reasignada por el sistema.
Una buena manera de evitar usar
accidentalmente la memoria liberada es
fijar el apuntador igual al apuntador nulo
después de solicitar delete


                 Mtl. Lourdes Cahuich        51
Liberación Duplicada de la
            Memoria
Solicitar delete para una posición de
memoria que ya ha sido liberada es otro
error común con respecto a la
administración dinámica de la memoria en
C++.




                Mtl. Lourdes Cahuich   52
Liberación Duplicada de la
            Memoria
Esto puede parecer un error muy obvio
que es fácil de evitar, pero al tener un
programa que tenga asignaciones y
liberaciones de espacio repartidas a
través de una base grande de código, este
error es muy común.



                Mtl. Lourdes Cahuich    53

Más contenido relacionado

La actualidad más candente

Administracion de memoria (politicas de busqueda)
Administracion de memoria (politicas de busqueda)Administracion de memoria (politicas de busqueda)
Administracion de memoria (politicas de busqueda)pepelebu1313
 
Administracion y manejo de memoria
Administracion y manejo de memoriaAdministracion y manejo de memoria
Administracion y manejo de memoriagiovatovar
 
Trabajo de gestión de la memoria principal.
Trabajo de gestión de la memoria principal.Trabajo de gestión de la memoria principal.
Trabajo de gestión de la memoria principal.Juliannys Requena
 
Gestion de Memoria
Gestion de MemoriaGestion de Memoria
Gestion de Memoriajhoax
 
Presentacion memoria
Presentacion memoriaPresentacion memoria
Presentacion memoriaIchinose 11
 
Asignación de memoria contigua
Asignación de memoria contiguaAsignación de memoria contigua
Asignación de memoria contiguaflromero_s
 
Administracion de la memoria, primeros sistemas
Administracion de la memoria, primeros sistemasAdministracion de la memoria, primeros sistemas
Administracion de la memoria, primeros sistemasANIUX77
 
Segunda unidas open suse
Segunda unidas open suseSegunda unidas open suse
Segunda unidas open suseMiguel Magaña
 
Algoritmos de gestión de memoria
Algoritmos de gestión de memoriaAlgoritmos de gestión de memoria
Algoritmos de gestión de memoriaadolfoahumada94
 
Gestion de-memoria-copia
Gestion de-memoria-copiaGestion de-memoria-copia
Gestion de-memoria-copiaBlanca Bailon
 
Unidad 3 el administrador de memoria
Unidad 3 el administrador de memoriaUnidad 3 el administrador de memoria
Unidad 3 el administrador de memoriacoffeejimenez
 

La actualidad más candente (20)

Sistemas Operativos Gestión de memoria
Sistemas Operativos Gestión de memoriaSistemas Operativos Gestión de memoria
Sistemas Operativos Gestión de memoria
 
Gestión de memoria
Gestión de memoriaGestión de memoria
Gestión de memoria
 
Administracion de memoria (politicas de busqueda)
Administracion de memoria (politicas de busqueda)Administracion de memoria (politicas de busqueda)
Administracion de memoria (politicas de busqueda)
 
Administracion y manejo de memoria
Administracion y manejo de memoriaAdministracion y manejo de memoria
Administracion y manejo de memoria
 
Trabajo de gestión de la memoria principal.
Trabajo de gestión de la memoria principal.Trabajo de gestión de la memoria principal.
Trabajo de gestión de la memoria principal.
 
Gestión de memoria
Gestión de memoriaGestión de memoria
Gestión de memoria
 
Gestion de Memoria
Gestion de MemoriaGestion de Memoria
Gestion de Memoria
 
Unidad 4
Unidad 4Unidad 4
Unidad 4
 
Presentacion memoria
Presentacion memoriaPresentacion memoria
Presentacion memoria
 
Asignación de memoria contigua
Asignación de memoria contiguaAsignación de memoria contigua
Asignación de memoria contigua
 
Administracion de la memoria, primeros sistemas
Administracion de la memoria, primeros sistemasAdministracion de la memoria, primeros sistemas
Administracion de la memoria, primeros sistemas
 
Opensuse2
Opensuse2Opensuse2
Opensuse2
 
Segunda unidas open suse
Segunda unidas open suseSegunda unidas open suse
Segunda unidas open suse
 
Gestion de memoria
Gestion de memoriaGestion de memoria
Gestion de memoria
 
Gestión Memoria Principal
Gestión Memoria PrincipalGestión Memoria Principal
Gestión Memoria Principal
 
Tc2 paso3
Tc2 paso3Tc2 paso3
Tc2 paso3
 
Algoritmos de gestión de memoria
Algoritmos de gestión de memoriaAlgoritmos de gestión de memoria
Algoritmos de gestión de memoria
 
Capitulo 2
Capitulo 2Capitulo 2
Capitulo 2
 
Gestion de-memoria-copia
Gestion de-memoria-copiaGestion de-memoria-copia
Gestion de-memoria-copia
 
Unidad 3 el administrador de memoria
Unidad 3 el administrador de memoriaUnidad 3 el administrador de memoria
Unidad 3 el administrador de memoria
 

Destacado

C9 administracion memoria
C9 administracion memoriaC9 administracion memoria
C9 administracion memoriaReyna Huallpa M
 
Administracion memoria
Administracion memoriaAdministracion memoria
Administracion memoria1993mely
 
Modelacion de algoritmo de paginacion
Modelacion de algoritmo de paginacionModelacion de algoritmo de paginacion
Modelacion de algoritmo de paginacionLuisFernandoCarranza
 
Segmentación Memoria Virtual
Segmentación Memoria VirtualSegmentación Memoria Virtual
Segmentación Memoria VirtualAna Brooks
 
Paginación y Segmentación
Paginación y SegmentaciónPaginación y Segmentación
Paginación y Segmentacióngabosand
 
SO - Administración de Memoria
SO - Administración de MemoriaSO - Administración de Memoria
SO - Administración de MemoriaLuis Eraso
 
Paginación, Segmentación y Fragmentación
Paginación, Segmentación y FragmentaciónPaginación, Segmentación y Fragmentación
Paginación, Segmentación y FragmentaciónNatalia Ludeña
 
Administracion de memoria en una PC
Administracion de memoria en una PCAdministracion de memoria en una PC
Administracion de memoria en una PCSimón Aranguren
 
Procesos y Planificación de la CPU
Procesos y Planificación de la CPUProcesos y Planificación de la CPU
Procesos y Planificación de la CPUGabriel Arellano
 
Administración de Memoria - Sistemas Operativos
Administración de Memoria - Sistemas OperativosAdministración de Memoria - Sistemas Operativos
Administración de Memoria - Sistemas OperativosPablo Macon
 

Destacado (18)

C9 administracion memoria
C9 administracion memoriaC9 administracion memoria
C9 administracion memoria
 
Administración de memoria
Administración de memoriaAdministración de memoria
Administración de memoria
 
Administracion de memoria
Administracion de memoriaAdministracion de memoria
Administracion de memoria
 
Administracion memoria
Administracion memoriaAdministracion memoria
Administracion memoria
 
Modelacion de algoritmo de paginacion
Modelacion de algoritmo de paginacionModelacion de algoritmo de paginacion
Modelacion de algoritmo de paginacion
 
Tecnicas de Administracion de Memoria
Tecnicas de Administracion de MemoriaTecnicas de Administracion de Memoria
Tecnicas de Administracion de Memoria
 
Segmentación Memoria Virtual
Segmentación Memoria VirtualSegmentación Memoria Virtual
Segmentación Memoria Virtual
 
Paginación y Segmentación
Paginación y SegmentaciónPaginación y Segmentación
Paginación y Segmentación
 
SO - Administración de Memoria
SO - Administración de MemoriaSO - Administración de Memoria
SO - Administración de Memoria
 
Administración de Memoria
Administración de MemoriaAdministración de Memoria
Administración de Memoria
 
Paginación, Segmentación y Fragmentación
Paginación, Segmentación y FragmentaciónPaginación, Segmentación y Fragmentación
Paginación, Segmentación y Fragmentación
 
PAGINACION Y SEGMENTACION DE MEMORIA
PAGINACION Y SEGMENTACION DE MEMORIAPAGINACION Y SEGMENTACION DE MEMORIA
PAGINACION Y SEGMENTACION DE MEMORIA
 
Administracion de memoria en una PC
Administracion de memoria en una PCAdministracion de memoria en una PC
Administracion de memoria en una PC
 
Procesos y Planificación de la CPU
Procesos y Planificación de la CPUProcesos y Planificación de la CPU
Procesos y Planificación de la CPU
 
Administración de Memoria - Sistemas Operativos
Administración de Memoria - Sistemas OperativosAdministración de Memoria - Sistemas Operativos
Administración de Memoria - Sistemas Operativos
 
Sistema operativo
Sistema operativoSistema operativo
Sistema operativo
 
Administracion de Memoria
Administracion de MemoriaAdministracion de Memoria
Administracion de Memoria
 
Sistemas de Archivos
Sistemas de ArchivosSistemas de Archivos
Sistemas de Archivos
 

Similar a 4 Administracion De Memoria

1 Resumen General Ssd5
1 Resumen General Ssd51 Resumen General Ssd5
1 Resumen General Ssd5UVM
 
Administración de memoria y apuntadores
Administración de memoria y apuntadoresAdministración de memoria y apuntadores
Administración de memoria y apuntadoresFranklin Chavez
 
Tercer blog arquitectura de hardware tercer corte
Tercer blog arquitectura de hardware tercer corteTercer blog arquitectura de hardware tercer corte
Tercer blog arquitectura de hardware tercer corteSebastian Gonzalez
 
Recursividad en programación
Recursividad en programaciónRecursividad en programación
Recursividad en programaciónKareliaRivas
 
Otra introducción a apuntadores
Otra introducción a apuntadoresOtra introducción a apuntadores
Otra introducción a apuntadoresUVM
 
Implementando Funciones Undo
Implementando Funciones UndoImplementando Funciones Undo
Implementando Funciones UndoUVM
 
Gestion de memoria en tiempo de ejecucion
Gestion de memoria en tiempo de ejecucionGestion de memoria en tiempo de ejecucion
Gestion de memoria en tiempo de ejecucionAndresDvila
 
5 Mecanismos Reuntilizacion Abstraccion
5 Mecanismos Reuntilizacion Abstraccion5 Mecanismos Reuntilizacion Abstraccion
5 Mecanismos Reuntilizacion AbstraccionUVM
 
Uso de los mutex y mas
Uso de los mutex y masUso de los mutex y mas
Uso de los mutex y masWhaleejaa Wha
 
11 Recursion
11 Recursion11 Recursion
11 RecursionUVM
 
Estructura de datos c++
Estructura de datos c++Estructura de datos c++
Estructura de datos c++kikeMerck
 
Capacidad de la unidad de procesamiento
Capacidad de la unidad de procesamientoCapacidad de la unidad de procesamiento
Capacidad de la unidad de procesamientoRosannyGamardo
 

Similar a 4 Administracion De Memoria (20)

1 Resumen General Ssd5
1 Resumen General Ssd51 Resumen General Ssd5
1 Resumen General Ssd5
 
Administración de memoria y apuntadores
Administración de memoria y apuntadoresAdministración de memoria y apuntadores
Administración de memoria y apuntadores
 
Tercer blog arquitectura de hardware tercer corte
Tercer blog arquitectura de hardware tercer corteTercer blog arquitectura de hardware tercer corte
Tercer blog arquitectura de hardware tercer corte
 
Recursividad en programación
Recursividad en programaciónRecursividad en programación
Recursividad en programación
 
Otra introducción a apuntadores
Otra introducción a apuntadoresOtra introducción a apuntadores
Otra introducción a apuntadores
 
Implementando Funciones Undo
Implementando Funciones UndoImplementando Funciones Undo
Implementando Funciones Undo
 
Yeimir rincon 20%
Yeimir rincon 20%Yeimir rincon 20%
Yeimir rincon 20%
 
Taller 18
Taller 18Taller 18
Taller 18
 
UNIDAD 5 - Algoritmia.pdf
UNIDAD 5 - Algoritmia.pdfUNIDAD 5 - Algoritmia.pdf
UNIDAD 5 - Algoritmia.pdf
 
Organizacion E/S
Organizacion E/SOrganizacion E/S
Organizacion E/S
 
GESTION DE MEMORIA
GESTION DE MEMORIAGESTION DE MEMORIA
GESTION DE MEMORIA
 
Direccionamiento
DireccionamientoDireccionamiento
Direccionamiento
 
PROCEDIMIENTOS ALMACENADOS
PROCEDIMIENTOS ALMACENADOSPROCEDIMIENTOS ALMACENADOS
PROCEDIMIENTOS ALMACENADOS
 
Apunfun1
Apunfun1Apunfun1
Apunfun1
 
Gestion de memoria en tiempo de ejecucion
Gestion de memoria en tiempo de ejecucionGestion de memoria en tiempo de ejecucion
Gestion de memoria en tiempo de ejecucion
 
5 Mecanismos Reuntilizacion Abstraccion
5 Mecanismos Reuntilizacion Abstraccion5 Mecanismos Reuntilizacion Abstraccion
5 Mecanismos Reuntilizacion Abstraccion
 
Uso de los mutex y mas
Uso de los mutex y masUso de los mutex y mas
Uso de los mutex y mas
 
11 Recursion
11 Recursion11 Recursion
11 Recursion
 
Estructura de datos c++
Estructura de datos c++Estructura de datos c++
Estructura de datos c++
 
Capacidad de la unidad de procesamiento
Capacidad de la unidad de procesamientoCapacidad de la unidad de procesamiento
Capacidad de la unidad de procesamiento
 

Más de UVM

Tiempo compartido en programación
Tiempo compartido en programaciónTiempo compartido en programación
Tiempo compartido en programaciónUVM
 
Portafolio de evidencias del curso Programación Avanzada
Portafolio de evidencias del curso Programación AvanzadaPortafolio de evidencias del curso Programación Avanzada
Portafolio de evidencias del curso Programación AvanzadaUVM
 
Eficiencia en uso tiempo
Eficiencia en uso  tiempoEficiencia en uso  tiempo
Eficiencia en uso tiempoUVM
 
Administración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicosAdministración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicosUVM
 
Practica de arreglos
Practica de arreglosPractica de arreglos
Practica de arreglosUVM
 
Ejemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stlEjemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stlUVM
 
Breve repaso de apuntadores
Breve repaso de apuntadoresBreve repaso de apuntadores
Breve repaso de apuntadoresUVM
 
Arreglos conceptos básicos
Arreglos conceptos básicosArreglos conceptos básicos
Arreglos conceptos básicosUVM
 
Resolución práctica de tipos de datos
Resolución práctica de tipos de datosResolución práctica de tipos de datos
Resolución práctica de tipos de datosUVM
 
Resumen de funciones
Resumen de funcionesResumen de funciones
Resumen de funcionesUVM
 
Biblioteca estándar de funciones
Biblioteca estándar de funcionesBiblioteca estándar de funciones
Biblioteca estándar de funcionesUVM
 
Manejo de bits
Manejo de bitsManejo de bits
Manejo de bitsUVM
 
Aclaración de dudas 4 de septiembre
Aclaración de dudas 4 de septiembreAclaración de dudas 4 de septiembre
Aclaración de dudas 4 de septiembreUVM
 
Aclaraciones varias a códigos entregados en sesión 3
Aclaraciones varias a códigos entregados en sesión 3Aclaraciones varias a códigos entregados en sesión 3
Aclaraciones varias a códigos entregados en sesión 3UVM
 
Funciones definidas por el usuario
Funciones definidas por el usuarioFunciones definidas por el usuario
Funciones definidas por el usuarioUVM
 
Función main()
Función main()Función main()
Función main()UVM
 
Depuración de un programa en c++
Depuración de un programa en c++Depuración de un programa en c++
Depuración de un programa en c++UVM
 
Algunas dudas de la sesión 28 agosto
Algunas dudas de la sesión 28 agostoAlgunas dudas de la sesión 28 agosto
Algunas dudas de la sesión 28 agostoUVM
 
Estructura programa c++
Estructura programa c++Estructura programa c++
Estructura programa c++UVM
 
Objetos y arreglos en C#
Objetos y arreglos en C#Objetos y arreglos en C#
Objetos y arreglos en C#UVM
 

Más de UVM (20)

Tiempo compartido en programación
Tiempo compartido en programaciónTiempo compartido en programación
Tiempo compartido en programación
 
Portafolio de evidencias del curso Programación Avanzada
Portafolio de evidencias del curso Programación AvanzadaPortafolio de evidencias del curso Programación Avanzada
Portafolio de evidencias del curso Programación Avanzada
 
Eficiencia en uso tiempo
Eficiencia en uso  tiempoEficiencia en uso  tiempo
Eficiencia en uso tiempo
 
Administración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicosAdministración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicos
 
Practica de arreglos
Practica de arreglosPractica de arreglos
Practica de arreglos
 
Ejemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stlEjemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stl
 
Breve repaso de apuntadores
Breve repaso de apuntadoresBreve repaso de apuntadores
Breve repaso de apuntadores
 
Arreglos conceptos básicos
Arreglos conceptos básicosArreglos conceptos básicos
Arreglos conceptos básicos
 
Resolución práctica de tipos de datos
Resolución práctica de tipos de datosResolución práctica de tipos de datos
Resolución práctica de tipos de datos
 
Resumen de funciones
Resumen de funcionesResumen de funciones
Resumen de funciones
 
Biblioteca estándar de funciones
Biblioteca estándar de funcionesBiblioteca estándar de funciones
Biblioteca estándar de funciones
 
Manejo de bits
Manejo de bitsManejo de bits
Manejo de bits
 
Aclaración de dudas 4 de septiembre
Aclaración de dudas 4 de septiembreAclaración de dudas 4 de septiembre
Aclaración de dudas 4 de septiembre
 
Aclaraciones varias a códigos entregados en sesión 3
Aclaraciones varias a códigos entregados en sesión 3Aclaraciones varias a códigos entregados en sesión 3
Aclaraciones varias a códigos entregados en sesión 3
 
Funciones definidas por el usuario
Funciones definidas por el usuarioFunciones definidas por el usuario
Funciones definidas por el usuario
 
Función main()
Función main()Función main()
Función main()
 
Depuración de un programa en c++
Depuración de un programa en c++Depuración de un programa en c++
Depuración de un programa en c++
 
Algunas dudas de la sesión 28 agosto
Algunas dudas de la sesión 28 agostoAlgunas dudas de la sesión 28 agosto
Algunas dudas de la sesión 28 agosto
 
Estructura programa c++
Estructura programa c++Estructura programa c++
Estructura programa c++
 
Objetos y arreglos en C#
Objetos y arreglos en C#Objetos y arreglos en C#
Objetos y arreglos en C#
 

Último

Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 

Último (13)

Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 

4 Administracion De Memoria

  • 1. Administración de Memoria Apoyo SSD5
  • 2. Apuntadores Un apuntador es una variable que almacena la dirección de la memoria de otra variable. La variable apuntador es única ya que salva la dirección de la memoria de otra variable La dirección de memoria es la localización específica en la memoria principal donde existe una variable durante la ejecución de un programa Mtl. Lourdes Cahuich 2
  • 3. Apuntadores Se usan apuntadores para acceder y manipular indirectamente otras variables. La quot;indirecciónquot; permite la creación de las estructuras de datos complejas y algoritmos poderosos. Por ejemplo, sin apuntadores e indirección no sería posible crear una estructura de datos de la lista encadenada. Mtl. Lourdes Cahuich 3
  • 4. Operaciones Básicas Declaración e Inicialización La declaración de una variable apuntador requiere el uso de cierta sintaxis desconocida. Una declaración del apuntador debe prefijar su nombre de variable con un asterisco (*), esto significa para el compilador que la variable declarada es un apuntador Mtl. Lourdes Cahuich 4
  • 5. Operaciones Básicas Aunque los apuntadores solamente almacenan direcciones de la memoria, la declaración de una variable apuntador debe especificar un tipo de datos específico cuya dirección de memoria pueda almacenar el apuntador; esto es indispensable para poder manipular la variable indirectamente Mtl. Lourdes Cahuich 5
  • 6. Operaciones Básicas La inicialización requiere sintaxis nueva; para esto se requiere obtener a dirección de memoria de la variable. El operador address-of (&) regresa la dirección de la memoria de donde está almacenada la variable Mtl. Lourdes Cahuich 6
  • 7. De-referenciar (Dereference) El acceso indirecto y la manipulación de variables usando apuntadores se logra usando el operador de-reference. Se aplica el operador de-reference (*) para acceder o modificar el valor de la variable señalada por un apuntador. Mtl. Lourdes Cahuich 7
  • 8. De-referenciar Los programadores pueden invocar funciones miembro de un objeto a través de un apuntador. El operador de la flecha (->) primero de- referencia el apuntador y en seguida invoca la función miembro nombrada. Mtl. Lourdes Cahuich 8
  • 9. De-referenciar Solamente podemos de-referenciar de forma segura los apuntadores que señalan hacia direcciones válidas de memoria. De-referenciar apuntadores que no se han inicializado a direcciones de memoria válidas causan un error de ejecución. Mtl. Lourdes Cahuich 9
  • 10. Una técnica utilizada para evitar este problema es la inicialización de variables apuntador al puntero nulo. El puntero nulo representa un lugar en la memoria que no puede ser de- referenciado. Esto evita que una de-referenciación accidental pueda causar un error de ejecución Mtl. Lourdes Cahuich 10
  • 11. El apuntador nulo es referenciado usando la macro NULL También se usan apuntadores nulos como valores para indicar el fin de alguna estructura o secuencia. Mtl. Lourdes Cahuich 11
  • 12. Aritmética del Apuntador La aritmética del apuntador es el uso de sumas y restas para cambiar la posición de memoria que un apuntador almacena. Estas operaciones son concernientes a la posición de la memoria actualmente almacenada en un apuntador Si se agrega o resta un número de memoria incluyendo el tamaño requerido por el tipo de dato Mtl. Lourdes Cahuich 12
  • 13. Aritmética del Apuntador C++ realiza esta multiplicación de memoria automática La aritmética del apuntador es una forma de acceder diferentes posiciones en una estructura de datos La aritmética del apuntador tiene muchos usos uno de ellos es el recorrido de arreglos (traversal of arrays). Mtl. Lourdes Cahuich 13
  • 14. Mecanismos de paso de parámetros Paso de Parámetros por Valor El paso de parámetros por valor es el mecanismo default de paso de parámetros en C++, se crea y se entrega una copia del parámetro a la función Esto es importante, debido a que si realizamos un cambio a un parámetro que sea pasado por valor, la variable original permanece sin cambios ya que éstos se realizan en una copia de la variable original Mtl. Lourdes Cahuich 14
  • 15. Paso de Parámetros por Referencia A diferencia del paso de parámetros por valor, no se hacen copias de las variables que son pasadas por referencia. En su lugar, una función llamada recibe una referencia, o alias, al parámetro real provisto por la función llamada. Por esta razón, el paso por referencia se utiliza para construir funciones que pueden modificar las variables en la función llamada Mtl. Lourdes Cahuich 15
  • 16. Mecanismos de paso de parámetros La sintaxis del paso de parámetros por referencia se declara incluyendo el prefijo & en la declaración del parámetro a recibir Aquí el signo quot;&quot; señala al compilador que este parámetro debe ser pasado por referencia Mtl. Lourdes Cahuich 16
  • 17. Mecanismos de paso de parámetros El paso de un parámetro por referencia también se utiliza como mecanismo para pasar objetos grandes a las funciones. Cuando los objetos son grandes, el paso por valor puede dar lugar a operaciones que consumen demasiado tiempo al sacar copias. Mtl. Lourdes Cahuich 17
  • 18. Mecanismos de paso de parámetros El paso por referencia es más eficiente porque no implica el sacar copias. Incluso cuando una función no intenta modificar uno de sus parámetros, se debe usar el paso por referencia cuando el parámetro es un objeto grande Mtl. Lourdes Cahuich 18
  • 19. Mecanismos de paso de parámetros A veces es útil pasar un apuntador por referencia. Esto se hace cuando una función necesita cambiar la posición almacenada de memoria del apuntador. Es decir se pasa un apuntador a una función por referencia cuando la función necesita reposicionar el apuntador. Mtl. Lourdes Cahuich 19
  • 20. Mecanismos de paso de parámetros Un error que comúnmente se comete al regresar por referencia, es regresar una referencia a una variable local. El ciclo de vida de una variable local termina cuando la función en la que la variable esta definida se termina de ejecutar. Mtl. Lourdes Cahuich 20
  • 21. Mecanismos de paso de parámetros Regresar una referencia a algo que ya no existe puede generar resultados inesperados. Mtl. Lourdes Cahuich 21
  • 22. Administración de la Memoria Dinámica El Almacén Libre Cada programa de C++ tiene lo que se llama el quot;almacén librequot;. El almacén libre, que a veces se le llama quot;heapquot; es un área de la memoria de un programa que se utiliza dinámicamente Mtl. Lourdes Cahuich 22
  • 23. Administración de la Memoria Dinámica Usar memoria dinámicamente significa que la cantidad de memoria requerida para una tarea es especificada en el tiempo de ejecución, en lugar del tiempo de compilación Las variables creadas en el almacén libre tienen dimensión dinámica. Mtl. Lourdes Cahuich 23
  • 24. Administración de la Memoria Dinámica La dimensión de una variable describe cuánto tiempo permanece la variable alrededor en un programa Las variables locales en funciones tienen dimensión local, se crean cuando se llama una función y se destruyen cuando la función regresa. Mtl. Lourdes Cahuich 24
  • 25. Administración de la Memoria Dinámica Las variables globales, que tienen dimensión estática son creadas y están disponibles a través del ciclo de vida completo de un programa. Una variable con dimensión dinámica tiene su ciclo de vida especificado explícitamente por el programador. Mtl. Lourdes Cahuich 25
  • 26. Asignación de Memoria El proceso de obtener memoria del almacén libre es llamado asignación de memoria. El operador new es usado en C++ para asignar memoria dinámicamente. // Allocate a single integer int* ptr = new int; Mtl. Lourdes Cahuich 26
  • 27. Asignación de Memoria El operador new siempre regresa una dirección de memoria. Recuerda, los apuntadores almacenan direcciones de memoria, por lo que nosotros debemos guardar el valor de regreso del operador new en el apuntador El operador new sirve para todos los tipos de datos Mtl. Lourdes Cahuich 27
  • 28. Asignación de Memoria Usando un apuntador, podemos tener acceso indirectamente y modificar la variable que acabamos de crear. // Allocate a single integer int* ptr = new int; *ptr = 10;cout << quot;Address: quot; << ptr << endl; cout << quot;Value: quot; << *ptr << endl; Mtl. Lourdes Cahuich 28
  • 29. Asignación de Memoria Los objetos también pueden ser asignados dinámicamente. El operador new, además de asignar la memoria para un objeto, llamará un constructor para el objeto Mtl. Lourdes Cahuich 29
  • 30. #include <iostream> #include <cstdlib> using namespace std; class my_class { private: int x; public: my_class() : x(0) {} my_class(int p) : x(p) {} int value() { return x;} }; int main(int argc, char* argv[]) { // Allocate a single object my_class* ptr1 = new my_class(4); // Allocate an array of objects my_class* ptr2 = new my_class[10]; cout << ptr1->value() << endl; cout << ptr2->value() << endl; return EXIT_SUCCESS; } Mtl. Lourdes Cahuich 30
  • 31. Liberación de Memoria El operador delete libera la memoria asignada usando el operador new. Para liberar, o desasignar memoria, el operador delete necesita conocer qué posición en la memoria deseamos liberar. Para este fin, le proporcionamos un apuntador, que en realidad es sólo la posición que obtuvimos del operador new Mtl. Lourdes Cahuich 31
  • 32. // Dynamically allocate a variable. double* ptr1 = new double; // ... use the variable ... // The variable is no longer needed, // so we return its memory to the Free Store. delete ptr1; Mtl. Lourdes Cahuich 32
  • 33. Liberación de Memoria Existe una sintaxis especial para ser usada por el operador delete al liberar arreglos. La palabra reservada delete es seguida por el operador ([]). Esto señala al ambiente de ejecución que lo que el operador delete debe liberar es en realidad un arreglo, no solo una variable. Mtl. Lourdes Cahuich 33
  • 34. Constructores Copy Un constructor copy define las acciones que necesitan tomarse para crear una copia de un objeto. A diferencia de los constructores regulares, una clase puede contener solo un constructor copy. Mtl. Lourdes Cahuich 34
  • 35. Constructores Copy Si una clase de C++ no define un constructor copy, el lenguaje provee a la clase un constructor copy por default. Este constructor copy por default hace una copia byte por byte del objeto Mtl. Lourdes Cahuich 35
  • 36. Constructores Copy Los constructores copy son invocados cuando se requiere hacer una copia de un objeto. Existen tres situaciones cuando se hacen copias de objetos. 1. Durante una declaración que involucre inicialización 2. Cuando los objetos son transmitidos por valor 3. Cuando los objetos son regresados por valor Mtl. Lourdes Cahuich 36
  • 37. Constructores Copy Usar el constructor copy default provisto por el sistema puede ser peligroso en un programa que usa le memoria dinámica. Pueden surgir situaciones donde dos o más objetos mantienen incorrectamente apuntadores a los mismos datos. Mtl. Lourdes Cahuich 37
  • 38. Constructores Copy El constructor por default, en el caso de tener apuntadores, copiará los punteros, no a lo que apuntan “copia superficial” El opuesto de una copia superficial es una copia profunda, o quot;deep copyquot;. Mtl. Lourdes Cahuich 38
  • 39. class Array { private: int *ptr; public: Array(void) : ptr(new int[10]) {} Array(const Array& src) { cout << quot;Copy Constructor Invoked!nquot;; ptr = new int[10]; for (int i = 0; i < 10; i++) { ptr[i] = src.ptr[i]; } } ~Array(void) {delete ptr;} Mtl. Lourdes Cahuich 39
  • 40. Constructores Copy Un constructor copy puede ser usado para asegurar la creación de una copia profunda en un objeto. El listado anterior contiene un constructor copy para la clase Array. Este constructor copy asigna un nuevo arreglo en la memoria y copia en ella los valores del arreglo fuente. Mtl. Lourdes Cahuich 40
  • 41. Errores Comunes La regla básica para tratar con la asignación dinámica y la desasignación o liberación del espacio es directa: para cada llamada a new (que consume memoria), debe haber una llamada correspondiente a delete (que libera memoria). Mtl. Lourdes Cahuich 41
  • 42. Errores Comunes Es importante pensar cuidadosamente y con anticipación donde y cuando la memoria debe ser asignada y liberada. No asignes memoria al azar a través del código o dentro de funciones anidadas, porque esto hace difícil mantener un registro de esas asignaciones. Mtl. Lourdes Cahuich 42
  • 43. Errores Comunes En general, los errores referentes a la asignación de memoria dinámica son difíciles de tratar, y es mejor evitarlos desde el principio Mtl. Lourdes Cahuich 43
  • 44. Agotamiento de la Memoria Si nunca se utiliza delete, y se continúa haciendo llamadas a new, el sistema en última instancia fallará cuando se quede sin memoria en el almacén libre. Los bugs o fallas de funcionamiento son llamadas quot;memory leaksquot; o agotamiento de la memoria y pueden ser muy difíciles de descubrir. Mtl. Lourdes Cahuich 44
  • 45. Agotamiento de la Memoria Una característica insidiosa de los agotamientos de la memoria es que conducen a caídas aparentemente al azar y fallas irreproducibles. Mtl. Lourdes Cahuich 45
  • 46. Sobreescritura Al tratar con los apuntadores en C++, es fácil a menudo sobrescribir la memoria. Las sobre escrituras son especialmente molestas al usar memoria dinámica. Esto es porque una sobre escritura en el heap daña la información usada para administrar la memoria dinámica. Mtl. Lourdes Cahuich 46
  • 47. Sobreescritura Las sobreescritura también son difíciles de detectar debido a que por lo general no causan un error inmediatamente. Una sobreescritura puede hacer que el programa falle después, en alguna otra sección del código Mtl. Lourdes Cahuich 47
  • 48. Sobreescritura Peor aún, el programa puede no fallar del todo, y continuar ejecutándose con ciertos datos corruptos Mtl. Lourdes Cahuich 48
  • 49. Uso de la Memoria Liberada Otro error común con respecto a la memoria dinámica es referenciar la memoria que ya ha sido liberada. Nunca es seguro utilizar un apuntador cuya posición de memoria almacenada se ha liberado usando delete Mtl. Lourdes Cahuich 49
  • 50. Uso de la Memoria Liberada El operador delete, por razones de eficiencia, no limpia el contenido de la memoria que libera. Esto significa que existe la posibilidad de que la memoria todavía pueda contener datos válidos, tiempo después de que se haya liberado espacio. Mtl. Lourdes Cahuich 50
  • 51. Uso de la Memoria Liberada No hay garantía de esto, sin embargo, la memoria en cuestión podría ser reasignada por el sistema. Una buena manera de evitar usar accidentalmente la memoria liberada es fijar el apuntador igual al apuntador nulo después de solicitar delete Mtl. Lourdes Cahuich 51
  • 52. Liberación Duplicada de la Memoria Solicitar delete para una posición de memoria que ya ha sido liberada es otro error común con respecto a la administración dinámica de la memoria en C++. Mtl. Lourdes Cahuich 52
  • 53. Liberación Duplicada de la Memoria Esto puede parecer un error muy obvio que es fácil de evitar, pero al tener un programa que tenga asignaciones y liberaciones de espacio repartidas a través de una base grande de código, este error es muy común. Mtl. Lourdes Cahuich 53