SlideShare una empresa de Scribd logo
Administración de memoria 
Uso intensivo de memoria
¿Qué es la memoria? 
• Es un lugar donde se guarda información a 
usar. 
• Cuando declaramos una variable o un arreglo, 
el programa indica que se debe reservar un 
espacio de memoria (la cantidad depende del 
tipo de dato) desde antes de compilar 
• Esta memoria permanecerá apartada para ser 
usada durante el tiempo que el programa lo 
requiera
Recordamos la estructura de un micro 
procesador
Imagen dinámica y más información 
• http://cmapspublic.ihmc.us/rid=12374330394 
78_461612613_16886/Memoria%20Prinicpal. 
cmap
Para ilustrar la administración de 
memoria… 
• Usemos un ejemplo en donde tengamos que 
usar mucha memoria.
¿Recuerdas cómo se almacena un 
arreglo en memoria?
• Sabemos que podemos hacer un arreglo tan 
grande como queramos. 
• ¿Recuerdas cómo crear, llenar y mostrar un 
arreglo en C++? 
• Hagamos un ejemplo en Visual Studio…
Si lo hiciéramos como procedimiento 
definido por el usuario… 
void arregloEstatico(void){ 
int aE[TAM]; //aquí se declara el arreglo estático cuyo tamaño fijo 
//está definido por la constante TAM 
cout << "nARREGLO ESTATICOn"; 
//ciclo para llenar el arreglo estático 
for (int i = 0; i < TAM; i++){ 
cout << "nEscribe elemento " << i << " del arreglo: "; 
cin >> aE[i]; 
} 
cout << "n";//imprime en pantalla una línea en blanco 
//ciclo para mostrar arreglo estático 
for (int i = 0; i < TAM; i++) 
cout << aE[i] << " "; 
cout << "n";//imprime en pantalla una línea en blanco 
}//fin procedimiento arregloEstatico
Pero … 
• ¿Qué pasa si queremos cambiar el tamaño del 
arreglo durante ejecución? 
• C++ permite cambiar la memoria según se va 
necesitando 
• A esto se llama “memoria dinámica” 
• Las ventajas de la memoria dinámica es que se 
aprovecha mejor la memoria de la máquina, 
apartando solamente lo que se necesita
Operadores “new” y “delete” 
• new() permite reservar memoria de almacén 
libre 
• delete() permite librear la memoria cuando ya 
no se necesita
NEW 
• Permite reservar un bloque de memoria y 
devuelve la dirección de comienzo de dicho 
bloque 
<variable_apuntador> = new <tipo_dato>; 
char *p = NULL; 
p= new char;
NEW 
• Con este operador también se pueden 
reservar bloques de memoria para arreglos. 
• Estos se conocen como arreglos dinámicos. 
• Si el operador “new” falla, devuelve un nulo, 
por lo que es obligatorio comprobar que el 
compilador ha podido realizar la reserva de 
memoria.
Ejemplo práctico 
• Ahora realicemos un arreglo dinámico en C++ 
usando Visual Studio…
• Si lo escribiéramos como un procedimiento 
definido por el usuario, quedaría…
void arregloDinamico(void){ 
int tamDin = 0; //variable para que el usuario indique el tamaño del arreglo que quiere 
cout << "nARREGLO DINAMICOn"; 
cout << "Escribe el tamaño del arreglo de enteros: ";//pide a usuario tamaño deseado 
cin >> tamDin; //se guarda el tamaño en variable tamDin 
int *pArregloDin; //apuntador para guardar dirección de inicio del arreglo dinámico 
pArregloDin = new int[tamDin]; //se aparta memoria dinámica para el arreglo pArregloDin 
//ciclo para llenar los elementos del arreglo dinámico 
for (int i = 0; i < tamDin; i++){ 
cout << "nElemento " << i << " ";//pide al usuario ingrese cada uno de 
//los elementos del arreglo 
cin >> pArregloDin[i]; 
}//fin for 
cout << "n";//imprime en pantalla una línea en blanco 
//ciclo para mostrar arreglo dinámico 
for (int i = 0; i < tamDin; i++) 
cout << pArregloDin[i] << " "; //fin for 
cout << "n";//imprime en pantalla una línea en blanco 
delete pArregloDin; //librea la memoria dinámica reservada para el arreglo 
}//fin procedimiento arreglo dinámico
La estructura de un programa que use 
ambos procedimientos mostrados es: 
#include <iostream> 
using namespace std; 
#define TAM 10 
void arregloEstatico(void); 
void arregloDinamico(void); 
int main(){ 
//arreglo estático 
arregloEstatico(); 
//arreglo dinámico 
arregloDinamico(); 
system("pause"); 
return 0; 
}//fin main
Errores de memoria
• La corrupción de memoria ocurre en un 
programa cuando los contenidos de una 
dirección de memoria se modifican 
involuntariamente debido a errores de 
programación.
• Cuando los contenidos corruptos de memoria 
se usan más adelante en el programa, llevan a 
un error o comportamiento extraño del 
mismo.
• La utilización de apuntadores que dan acceso 
explícito a direcciones de memoria y 
aritmética de apuntadores, que permiten 
desarrollar aplicaciones eficientes, si no se 
usan de forma adecuada pueden ocasionar 
errores de corrupción de memoria.
• Estos errores son los más peligrosos y los más 
difíciles de detectar debido a: 
– El origen de la corrupción de memoria y su 
manifestación durante la ejecución del programa, 
pueden estar muy separados, por lo que es difícil 
relacionar la causa y el efecto. 
– Los “síntomas” aparecen en condiciones 
inusuales, por lo que es difícil reproducir el error 
de manera consistente o constante.
Categorías de errores 
1. Utilización de memoria no inicializada: se 
considera que los contenidos de la memoria 
no inicializada son valores basura (como 
poner comida recién hecha en un plato 
sucio), y usar estos valores puede llevar al 
comportamiento imprevisible del programa.
Categorías de errores (cont.) 
2. Uso de memoria sin dueño: Cuando un 
apuntador es nulo o apunta a una sección de 
memoria ya liberada, o una ubicación de 
memoria que esta fuera de la pila de 
memoria del programa. Suelen causar 
excepciones de “fallos de página”, lo que 
lleva a una falla del programa.
Categorías de errores (cont.) 
3. Usar memoria más allá de la asignada (buffer 
overflow): Si se tiene un arreglo que es usado 
dentro de un bucle/ciclo que tiene sus 
contadores de elementos incorrectos, la 
memoria más allá de los límites del arreglo 
puede ser manipulada.
Categorías de errores (cont.) 
4. Gestión defectuosa de memoria heap: Fugas 
de memoria y liberar memora que no es del 
“heap” o está sin asignar.
Cómo evitar fugas de memoria 
• Una fuga de memoria es un error de 
programación que ocurre cuando un 
programa no libera toda la memoria que se 
reservó, y debido a esto la aplicación puede 
quedarse sin memoria y causar que el sistema 
falle. 
• Para prevenir esto se debe saber cuándo 
ocurren y hacer buen uso de los operadores 
“new” y “delete”.
Cómo evitar fugas de memoria 
1. Por cada “new” se debe utilizar un “delete” 
para liberar la misma cantidad de memoria 
reservada con “new”. 
2. Reserva memoria sólo si la has borrado. 
char * str = new char[30]; //aparta dirección mem 
//delete [] str; //esta linea corrige error 
str = new char [60]; //da otra dirección de mem 
//se pierde la primera memoria apartada 
3. Vigila las asignaciones de apuntadores.
Tarea MRR 
• Investiga qué es el “heap” de memoria y 
escríbelo en tu cuaderno MRR 
• Investiga códigos en C++ que ejemplifiquen los 
tipos de errores de manejo de memoria 
mencionados aquí. 
• Describe cada ejemplo que investigaste, 
detallándolo por escrito en tu cuaderno MRR.

Más contenido relacionado

La actualidad más candente

Unidad 2 ensamblador
Unidad 2   ensambladorUnidad 2   ensamblador
Unidad 2 ensambladoreveTalavera
 
EJERCICIOS DE ADMINISTRACION DE MEMORIA
EJERCICIOS DE ADMINISTRACION DE MEMORIAEJERCICIOS DE ADMINISTRACION DE MEMORIA
EJERCICIOS DE ADMINISTRACION DE MEMORIAJhons Borja B
 
Manual Instalacion EMU8086
Manual Instalacion EMU8086Manual Instalacion EMU8086
Manual Instalacion EMU8086Zulay Limaico
 
Conversión de un AFN a un AFD.
Conversión de un AFN a un AFD.Conversión de un AFN a un AFD.
Conversión de un AFN a un AFD.Vikky Moscoso
 
Programación estructurada y Herramientas estructurada
Programación estructurada y Herramientas estructuradaProgramación estructurada y Herramientas estructurada
Programación estructurada y Herramientas estructuradaLuisAlvarez618
 
Algoritmo de planificación srt
Algoritmo de planificación srtAlgoritmo de planificación srt
Algoritmo de planificación srtCarlos Solano
 
Fundamentos de Programación - Unidad III Control de Flujo
Fundamentos de Programación - Unidad III Control de FlujoFundamentos de Programación - Unidad III Control de Flujo
Fundamentos de Programación - Unidad III Control de FlujoJosé Antonio Sandoval Acosta
 
Modelo incremental
Modelo incrementalModelo incremental
Modelo incrementalJose Caicedo
 
Arquitectura Del Computador
Arquitectura Del ComputadorArquitectura Del Computador
Arquitectura Del Computadorivan
 
El sistema de archivos ms dos
El sistema de archivos ms dosEl sistema de archivos ms dos
El sistema de archivos ms dosArthur Punk Rock
 
Modelos de arquitecturas de computadoras
Modelos de arquitecturas de computadorasModelos de arquitecturas de computadoras
Modelos de arquitecturas de computadorasYESENIA CETINA
 
Lenguajes de simulacion
Lenguajes de simulacionLenguajes de simulacion
Lenguajes de simulacionAnel Sosa
 
Crisis del software
Crisis del softwareCrisis del software
Crisis del softwareecasteloc
 

La actualidad más candente (20)

Unidad 2 ensamblador
Unidad 2   ensambladorUnidad 2   ensamblador
Unidad 2 ensamblador
 
Lógica Difusa
Lógica DifusaLógica Difusa
Lógica Difusa
 
EJERCICIOS DE ADMINISTRACION DE MEMORIA
EJERCICIOS DE ADMINISTRACION DE MEMORIAEJERCICIOS DE ADMINISTRACION DE MEMORIA
EJERCICIOS DE ADMINISTRACION DE MEMORIA
 
Manual Instalacion EMU8086
Manual Instalacion EMU8086Manual Instalacion EMU8086
Manual Instalacion EMU8086
 
Conversión de un AFN a un AFD.
Conversión de un AFN a un AFD.Conversión de un AFN a un AFD.
Conversión de un AFN a un AFD.
 
Programación estructurada y Herramientas estructurada
Programación estructurada y Herramientas estructuradaProgramación estructurada y Herramientas estructurada
Programación estructurada y Herramientas estructurada
 
Algoritmo de planificación srt
Algoritmo de planificación srtAlgoritmo de planificación srt
Algoritmo de planificación srt
 
Arquitectura de computadores
Arquitectura de computadoresArquitectura de computadores
Arquitectura de computadores
 
Fundamentos de Programación - Unidad III Control de Flujo
Fundamentos de Programación - Unidad III Control de FlujoFundamentos de Programación - Unidad III Control de Flujo
Fundamentos de Programación - Unidad III Control de Flujo
 
Modelo incremental
Modelo incrementalModelo incremental
Modelo incremental
 
Arquitectura Del Computador
Arquitectura Del ComputadorArquitectura Del Computador
Arquitectura Del Computador
 
El sistema de archivos ms dos
El sistema de archivos ms dosEl sistema de archivos ms dos
El sistema de archivos ms dos
 
Logica difusa
Logica difusaLogica difusa
Logica difusa
 
Modelos de arquitecturas de computadoras
Modelos de arquitecturas de computadorasModelos de arquitecturas de computadoras
Modelos de arquitecturas de computadoras
 
Lenguajes de simulacion
Lenguajes de simulacionLenguajes de simulacion
Lenguajes de simulacion
 
Algoritmo SJF
Algoritmo SJFAlgoritmo SJF
Algoritmo SJF
 
Arquitectura de Von Neumann
Arquitectura de Von NeumannArquitectura de Von Neumann
Arquitectura de Von Neumann
 
Estructura de directorios de Linux
Estructura de directorios de LinuxEstructura de directorios de Linux
Estructura de directorios de Linux
 
Crisis del software
Crisis del softwareCrisis del software
Crisis del software
 
arquitecturas-SISD%SIMD%MISD%MIMD
arquitecturas-SISD%SIMD%MISD%MIMDarquitecturas-SISD%SIMD%MISD%MIMD
arquitecturas-SISD%SIMD%MISD%MIMD
 

Destacado

Descifra el mensaje oculto
Descifra el mensaje ocultoDescifra el mensaje oculto
Descifra el mensaje ocultoCarlos Ipiéns
 
Material de juegos didacticos
Material de juegos didacticosMaterial de juegos didacticos
Material de juegos didacticosboentes
 
Codifcacion, cifrado y encriptado de datos
Codifcacion, cifrado y encriptado de datosCodifcacion, cifrado y encriptado de datos
Codifcacion, cifrado y encriptado de datoslucianasanes
 
Trabajo de sistema binario claudia
Trabajo de sistema binario claudiaTrabajo de sistema binario claudia
Trabajo de sistema binario claudiaClaudia Sanchez
 
Administración de memoria continuación -matrices estáticas y dinámicas
Administración de memoria continuación -matrices estáticas y dinámicasAdministración de memoria continuación -matrices estáticas y dinámicas
Administración de memoria continuación -matrices estáticas y dinámicasUVM
 
Estructuras de datos_dinamicas_definicion_e_implementacion_
Estructuras de datos_dinamicas_definicion_e_implementacion_Estructuras de datos_dinamicas_definicion_e_implementacion_
Estructuras de datos_dinamicas_definicion_e_implementacion_Diosmary Marrón Dellán
 
Arrays bidimensionales
Arrays bidimensionalesArrays bidimensionales
Arrays bidimensionalesasvargas
 
Apuntadores
ApuntadoresApuntadores
Apuntadoresluisabn
 
PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++die_dex
 

Destacado (20)

Procesamiento de datos
Procesamiento de datosProcesamiento de datos
Procesamiento de datos
 
Descifra el mensaje oculto
Descifra el mensaje ocultoDescifra el mensaje oculto
Descifra el mensaje oculto
 
Material de juegos didacticos
Material de juegos didacticosMaterial de juegos didacticos
Material de juegos didacticos
 
Arrays dinamicos
Arrays dinamicosArrays dinamicos
Arrays dinamicos
 
Arreglos1
Arreglos1Arreglos1
Arreglos1
 
Codifcacion, cifrado y encriptado de datos
Codifcacion, cifrado y encriptado de datosCodifcacion, cifrado y encriptado de datos
Codifcacion, cifrado y encriptado de datos
 
Trabajo de sistema binario claudia
Trabajo de sistema binario claudiaTrabajo de sistema binario claudia
Trabajo de sistema binario claudia
 
Estructuras de datos
Estructuras de datosEstructuras de datos
Estructuras de datos
 
Memoria memoria dinamica
 Memoria memoria dinamica Memoria memoria dinamica
Memoria memoria dinamica
 
Trabajo de estructura de datos
Trabajo de estructura de datosTrabajo de estructura de datos
Trabajo de estructura de datos
 
Administración de memoria continuación -matrices estáticas y dinámicas
Administración de memoria continuación -matrices estáticas y dinámicasAdministración de memoria continuación -matrices estáticas y dinámicas
Administración de memoria continuación -matrices estáticas y dinámicas
 
Exp compi(2)
Exp compi(2)Exp compi(2)
Exp compi(2)
 
Estructuras de datos_dinamicas_definicion_e_implementacion_
Estructuras de datos_dinamicas_definicion_e_implementacion_Estructuras de datos_dinamicas_definicion_e_implementacion_
Estructuras de datos_dinamicas_definicion_e_implementacion_
 
Arrays bidimensionales
Arrays bidimensionalesArrays bidimensionales
Arrays bidimensionales
 
Apuntadores
ApuntadoresApuntadores
Apuntadores
 
Apuntadores
ApuntadoresApuntadores
Apuntadores
 
PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++
 
Arreglos en Java
Arreglos en JavaArreglos en Java
Arreglos en Java
 
Arreglos multidimensionales y de apuntadores
Arreglos multidimensionales y de apuntadoresArreglos multidimensionales y de apuntadores
Arreglos multidimensionales y de apuntadores
 
Ejercicios punteros cadenas-vectores
Ejercicios punteros cadenas-vectoresEjercicios punteros cadenas-vectores
Ejercicios punteros cadenas-vectores
 

Similar a Administración de memoria - arreglos estáticos y dinámicos

Administración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicosAdministración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicosUVM
 
Estructura de datos c++
Estructura de datos c++Estructura de datos c++
Estructura de datos c++kikeMerck
 
Unidad 2
Unidad 2Unidad 2
Unidad 2Isabel
 
Castaño y navarro
Castaño y navarroCastaño y navarro
Castaño y navarrokathenavarro
 
Expo Sistemas Operativos
Expo Sistemas OperativosExpo Sistemas Operativos
Expo Sistemas Operativosguestaf356ab6
 
MEMORIA VIRTUAL - SISTEMAS OPERATIVOS
MEMORIA VIRTUAL - SISTEMAS OPERATIVOSMEMORIA VIRTUAL - SISTEMAS OPERATIVOS
MEMORIA VIRTUAL - SISTEMAS OPERATIVOSAnnimoLatinoamerica
 
Sistema operativo.ppt
Sistema operativo.pptSistema operativo.ppt
Sistema operativo.pptAngizon Vn'
 
Tatiana sanchez 1
Tatiana sanchez 1Tatiana sanchez 1
Tatiana sanchez 1tatyseli
 
Presentacion memoria
Presentacion memoriaPresentacion memoria
Presentacion memoriaIchinose 11
 
Castaño y navarro
Castaño y navarroCastaño y navarro
Castaño y navarrokathenavarro
 
Castaño y navarro
Castaño y navarroCastaño y navarro
Castaño y navarrokathenavarro
 
Manual de Mantenimineto Correctivo
Manual de Mantenimineto CorrectivoManual de Mantenimineto Correctivo
Manual de Mantenimineto CorrectivoAna Karen Gonzalez
 
AignacióN De Memoria Con Particiones DináMicas
AignacióN De Memoria Con Particiones DináMicasAignacióN De Memoria Con Particiones DináMicas
AignacióN De Memoria Con Particiones DináMicasESPOCH
 
AignacióN De Memoria Con Particiones DináMicas
AignacióN De Memoria Con Particiones DináMicasAignacióN De Memoria Con Particiones DináMicas
AignacióN De Memoria Con Particiones DináMicasESPOCH
 

Similar a Administración de memoria - arreglos estáticos y dinámicos (20)

Administración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicosAdministración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicos
 
Memoria dinamica
Memoria dinamicaMemoria dinamica
Memoria dinamica
 
Estructura de datos c++
Estructura de datos c++Estructura de datos c++
Estructura de datos c++
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
Castaño y navarro
Castaño y navarroCastaño y navarro
Castaño y navarro
 
Expo Sistemas Operativos
Expo Sistemas OperativosExpo Sistemas Operativos
Expo Sistemas Operativos
 
MEMORIA VIRTUAL - SISTEMAS OPERATIVOS
MEMORIA VIRTUAL - SISTEMAS OPERATIVOSMEMORIA VIRTUAL - SISTEMAS OPERATIVOS
MEMORIA VIRTUAL - SISTEMAS OPERATIVOS
 
Sistema operativo.ppt
Sistema operativo.pptSistema operativo.ppt
Sistema operativo.ppt
 
Tatiana sanchez 1
Tatiana sanchez 1Tatiana sanchez 1
Tatiana sanchez 1
 
Presentacion memoria
Presentacion memoriaPresentacion memoria
Presentacion memoria
 
Unidad 3 s.o.
Unidad 3 s.o.Unidad 3 s.o.
Unidad 3 s.o.
 
Unidad 3 s.o.
Unidad 3 s.o.Unidad 3 s.o.
Unidad 3 s.o.
 
Unidad 3 s.o.
Unidad 3 s.o.Unidad 3 s.o.
Unidad 3 s.o.
 
Memoria dinamica
Memoria dinamicaMemoria dinamica
Memoria dinamica
 
Castaño y navarro
Castaño y navarroCastaño y navarro
Castaño y navarro
 
Castaño y navarro
Castaño y navarroCastaño y navarro
Castaño y navarro
 
Manual de Mantenimineto Correctivo
Manual de Mantenimineto CorrectivoManual de Mantenimineto Correctivo
Manual de Mantenimineto Correctivo
 
memoria_virtual
memoria_virtualmemoria_virtual
memoria_virtual
 
AignacióN De Memoria Con Particiones DináMicas
AignacióN De Memoria Con Particiones DináMicasAignacióN De Memoria Con Particiones DináMicas
AignacióN De Memoria Con Particiones DináMicas
 
AignacióN De Memoria Con Particiones DináMicas
AignacióN De Memoria Con Particiones DináMicasAignacióN De Memoria Con Particiones DináMicas
AignacióN De Memoria Con Particiones DináMicas
 

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
 
Practica de arreglos
Practica de arreglosPractica de arreglos
Practica de arreglosUVM
 
Otra introducción a apuntadores
Otra introducción a apuntadoresOtra introducción a apuntadores
Otra introducción a apuntadoresUVM
 
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
 
Practica de arreglos
Practica de arreglosPractica de arreglos
Practica de arreglos
 
Otra introducción a apuntadores
Otra introducción a apuntadoresOtra introducción a apuntadores
Otra introducción a apuntadores
 
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

experiencia de aprendizaje sobre lectura y escritura como herramientas de ap...
experiencia de aprendizaje sobre lectura y escritura como  herramientas de ap...experiencia de aprendizaje sobre lectura y escritura como  herramientas de ap...
experiencia de aprendizaje sobre lectura y escritura como herramientas de ap...cuentauniversidad34
 
infografia del sena para analisis y desarrollo de software
infografia del sena para analisis y desarrollo de softwareinfografia del sena para analisis y desarrollo de software
infografia del sena para analisis y desarrollo de softwareoscartorres960914
 
PSICOLOGÍA si quieres aprender los temas principales para el examen de admisión
PSICOLOGÍA si quieres aprender los temas principales para el examen de admisiónPSICOLOGÍA si quieres aprender los temas principales para el examen de admisión
PSICOLOGÍA si quieres aprender los temas principales para el examen de admisiónCamilaEspinozaCruz
 
PitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitalesPitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitalesjuanorejuela499
 
FICHA DE TRABAJO DE CREACION DE TABLAS EN WORD
FICHA  DE TRABAJO DE CREACION DE TABLAS EN WORDFICHA  DE TRABAJO DE CREACION DE TABLAS EN WORD
FICHA DE TRABAJO DE CREACION DE TABLAS EN WORDRobertSotilLujn
 
trabajo integrador final sofi y vane.docx
trabajo integrador final sofi y vane.docxtrabajo integrador final sofi y vane.docx
trabajo integrador final sofi y vane.docxlasocharfuelan123
 
Los desafíos de calidad de software que nos trae la IA y los LLMs
Los desafíos de calidad de software que nos trae la IA y los LLMsLos desafíos de calidad de software que nos trae la IA y los LLMs
Los desafíos de calidad de software que nos trae la IA y los LLMsFederico Toledo
 
Maquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdfMaquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdfjuanjosebarreiro704
 
Caso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La SalleCaso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La SalleEcaresoft Inc.
 
MODULO BASICO DE WORD - I CICLO.DOC.DOC.
MODULO BASICO DE WORD - I CICLO.DOC.DOC.MODULO BASICO DE WORD - I CICLO.DOC.DOC.
MODULO BASICO DE WORD - I CICLO.DOC.DOC.CarmenFlores88207
 
Escaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipoEscaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equiponicromante2000
 

Último (11)

experiencia de aprendizaje sobre lectura y escritura como herramientas de ap...
experiencia de aprendizaje sobre lectura y escritura como  herramientas de ap...experiencia de aprendizaje sobre lectura y escritura como  herramientas de ap...
experiencia de aprendizaje sobre lectura y escritura como herramientas de ap...
 
infografia del sena para analisis y desarrollo de software
infografia del sena para analisis y desarrollo de softwareinfografia del sena para analisis y desarrollo de software
infografia del sena para analisis y desarrollo de software
 
PSICOLOGÍA si quieres aprender los temas principales para el examen de admisión
PSICOLOGÍA si quieres aprender los temas principales para el examen de admisiónPSICOLOGÍA si quieres aprender los temas principales para el examen de admisión
PSICOLOGÍA si quieres aprender los temas principales para el examen de admisión
 
PitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitalesPitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitales
 
FICHA DE TRABAJO DE CREACION DE TABLAS EN WORD
FICHA  DE TRABAJO DE CREACION DE TABLAS EN WORDFICHA  DE TRABAJO DE CREACION DE TABLAS EN WORD
FICHA DE TRABAJO DE CREACION DE TABLAS EN WORD
 
trabajo integrador final sofi y vane.docx
trabajo integrador final sofi y vane.docxtrabajo integrador final sofi y vane.docx
trabajo integrador final sofi y vane.docx
 
Los desafíos de calidad de software que nos trae la IA y los LLMs
Los desafíos de calidad de software que nos trae la IA y los LLMsLos desafíos de calidad de software que nos trae la IA y los LLMs
Los desafíos de calidad de software que nos trae la IA y los LLMs
 
Maquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdfMaquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdf
 
Caso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La SalleCaso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La Salle
 
MODULO BASICO DE WORD - I CICLO.DOC.DOC.
MODULO BASICO DE WORD - I CICLO.DOC.DOC.MODULO BASICO DE WORD - I CICLO.DOC.DOC.
MODULO BASICO DE WORD - I CICLO.DOC.DOC.
 
Escaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipoEscaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipo
 

Administración de memoria - arreglos estáticos y dinámicos

  • 1. Administración de memoria Uso intensivo de memoria
  • 2. ¿Qué es la memoria? • Es un lugar donde se guarda información a usar. • Cuando declaramos una variable o un arreglo, el programa indica que se debe reservar un espacio de memoria (la cantidad depende del tipo de dato) desde antes de compilar • Esta memoria permanecerá apartada para ser usada durante el tiempo que el programa lo requiera
  • 3. Recordamos la estructura de un micro procesador
  • 4.
  • 5. Imagen dinámica y más información • http://cmapspublic.ihmc.us/rid=12374330394 78_461612613_16886/Memoria%20Prinicpal. cmap
  • 6.
  • 7. Para ilustrar la administración de memoria… • Usemos un ejemplo en donde tengamos que usar mucha memoria.
  • 8. ¿Recuerdas cómo se almacena un arreglo en memoria?
  • 9. • Sabemos que podemos hacer un arreglo tan grande como queramos. • ¿Recuerdas cómo crear, llenar y mostrar un arreglo en C++? • Hagamos un ejemplo en Visual Studio…
  • 10. Si lo hiciéramos como procedimiento definido por el usuario… void arregloEstatico(void){ int aE[TAM]; //aquí se declara el arreglo estático cuyo tamaño fijo //está definido por la constante TAM cout << "nARREGLO ESTATICOn"; //ciclo para llenar el arreglo estático for (int i = 0; i < TAM; i++){ cout << "nEscribe elemento " << i << " del arreglo: "; cin >> aE[i]; } cout << "n";//imprime en pantalla una línea en blanco //ciclo para mostrar arreglo estático for (int i = 0; i < TAM; i++) cout << aE[i] << " "; cout << "n";//imprime en pantalla una línea en blanco }//fin procedimiento arregloEstatico
  • 11. Pero … • ¿Qué pasa si queremos cambiar el tamaño del arreglo durante ejecución? • C++ permite cambiar la memoria según se va necesitando • A esto se llama “memoria dinámica” • Las ventajas de la memoria dinámica es que se aprovecha mejor la memoria de la máquina, apartando solamente lo que se necesita
  • 12. Operadores “new” y “delete” • new() permite reservar memoria de almacén libre • delete() permite librear la memoria cuando ya no se necesita
  • 13. NEW • Permite reservar un bloque de memoria y devuelve la dirección de comienzo de dicho bloque <variable_apuntador> = new <tipo_dato>; char *p = NULL; p= new char;
  • 14. NEW • Con este operador también se pueden reservar bloques de memoria para arreglos. • Estos se conocen como arreglos dinámicos. • Si el operador “new” falla, devuelve un nulo, por lo que es obligatorio comprobar que el compilador ha podido realizar la reserva de memoria.
  • 15. Ejemplo práctico • Ahora realicemos un arreglo dinámico en C++ usando Visual Studio…
  • 16. • Si lo escribiéramos como un procedimiento definido por el usuario, quedaría…
  • 17. void arregloDinamico(void){ int tamDin = 0; //variable para que el usuario indique el tamaño del arreglo que quiere cout << "nARREGLO DINAMICOn"; cout << "Escribe el tamaño del arreglo de enteros: ";//pide a usuario tamaño deseado cin >> tamDin; //se guarda el tamaño en variable tamDin int *pArregloDin; //apuntador para guardar dirección de inicio del arreglo dinámico pArregloDin = new int[tamDin]; //se aparta memoria dinámica para el arreglo pArregloDin //ciclo para llenar los elementos del arreglo dinámico for (int i = 0; i < tamDin; i++){ cout << "nElemento " << i << " ";//pide al usuario ingrese cada uno de //los elementos del arreglo cin >> pArregloDin[i]; }//fin for cout << "n";//imprime en pantalla una línea en blanco //ciclo para mostrar arreglo dinámico for (int i = 0; i < tamDin; i++) cout << pArregloDin[i] << " "; //fin for cout << "n";//imprime en pantalla una línea en blanco delete pArregloDin; //librea la memoria dinámica reservada para el arreglo }//fin procedimiento arreglo dinámico
  • 18. La estructura de un programa que use ambos procedimientos mostrados es: #include <iostream> using namespace std; #define TAM 10 void arregloEstatico(void); void arregloDinamico(void); int main(){ //arreglo estático arregloEstatico(); //arreglo dinámico arregloDinamico(); system("pause"); return 0; }//fin main
  • 20. • La corrupción de memoria ocurre en un programa cuando los contenidos de una dirección de memoria se modifican involuntariamente debido a errores de programación.
  • 21. • Cuando los contenidos corruptos de memoria se usan más adelante en el programa, llevan a un error o comportamiento extraño del mismo.
  • 22. • La utilización de apuntadores que dan acceso explícito a direcciones de memoria y aritmética de apuntadores, que permiten desarrollar aplicaciones eficientes, si no se usan de forma adecuada pueden ocasionar errores de corrupción de memoria.
  • 23. • Estos errores son los más peligrosos y los más difíciles de detectar debido a: – El origen de la corrupción de memoria y su manifestación durante la ejecución del programa, pueden estar muy separados, por lo que es difícil relacionar la causa y el efecto. – Los “síntomas” aparecen en condiciones inusuales, por lo que es difícil reproducir el error de manera consistente o constante.
  • 24. Categorías de errores 1. Utilización de memoria no inicializada: se considera que los contenidos de la memoria no inicializada son valores basura (como poner comida recién hecha en un plato sucio), y usar estos valores puede llevar al comportamiento imprevisible del programa.
  • 25. Categorías de errores (cont.) 2. Uso de memoria sin dueño: Cuando un apuntador es nulo o apunta a una sección de memoria ya liberada, o una ubicación de memoria que esta fuera de la pila de memoria del programa. Suelen causar excepciones de “fallos de página”, lo que lleva a una falla del programa.
  • 26. Categorías de errores (cont.) 3. Usar memoria más allá de la asignada (buffer overflow): Si se tiene un arreglo que es usado dentro de un bucle/ciclo que tiene sus contadores de elementos incorrectos, la memoria más allá de los límites del arreglo puede ser manipulada.
  • 27. Categorías de errores (cont.) 4. Gestión defectuosa de memoria heap: Fugas de memoria y liberar memora que no es del “heap” o está sin asignar.
  • 28. Cómo evitar fugas de memoria • Una fuga de memoria es un error de programación que ocurre cuando un programa no libera toda la memoria que se reservó, y debido a esto la aplicación puede quedarse sin memoria y causar que el sistema falle. • Para prevenir esto se debe saber cuándo ocurren y hacer buen uso de los operadores “new” y “delete”.
  • 29. Cómo evitar fugas de memoria 1. Por cada “new” se debe utilizar un “delete” para liberar la misma cantidad de memoria reservada con “new”. 2. Reserva memoria sólo si la has borrado. char * str = new char[30]; //aparta dirección mem //delete [] str; //esta linea corrige error str = new char [60]; //da otra dirección de mem //se pierde la primera memoria apartada 3. Vigila las asignaciones de apuntadores.
  • 30. Tarea MRR • Investiga qué es el “heap” de memoria y escríbelo en tu cuaderno MRR • Investiga códigos en C++ que ejemplifiquen los tipos de errores de manejo de memoria mencionados aquí. • Describe cada ejemplo que investigaste, detallándolo por escrito en tu cuaderno MRR.

Notas del editor

  1. http://cmapspublic.ihmc.us/rid=1237433039478_461612613_16886/Memoria%20Prinicpal.cmap
  2. http://www.seduca2.uaemex.mx/material/LIA/AC/Sec12_R.php
  3. http://metodos1utec.blogspot.mx/2012/10/representacion-de-arreglos.html