SlideShare una empresa de Scribd logo
1 de 17
ADMINISTRACIÓN
DE MEMORIA Y
APUNTADORES

ESTRUCTURAS DE DATOS
José F. Chávez R.
Memoria Estática
•   Suele estar alojada en el stack o pila es una zona
    bastante limitada.
•   Se utiliza para declarar variables de un tamaño que no
    podemos modificar en la ejecución del programa.
•   Procesa los datos más rápidos.
•   En la memoria estática el tamaño de las variables se
    conoce en tiempo de compilación, esta información
    está incluida en el código objeto generado, por lo cual
    el proceso es muy eficiente.
Memoria Dinámica
 La memoria dinámica esta alojada en el   heap o
  almacenamiento libre.
 Se utiliza cuando el programador desconoce el número
  de datos o elementos a tratar.
 Su tamaño puede variar durante la ejecución del
  programa.
 Es muy lento a comparación con la m. estática, ya que
  en el tiempo de ejecución es cuando determina la
  memoria a usar.
 Es más difícil de utilizar.
Tipos de funciones de la memoria
dinámica
 Malloc
 Calloc
 Realloc
 Free
Malloc
 Reserva un bloque de memoria y devuelve     un
  puntero void al inicio de la misma.
 Tiene la siguiente definición: void *malloc(size_t
  size);
 Donde el parámetro size especifica el número de
  bytes a reservar.
Calloc

 Funciona de modo similar a malloc, pero además de
  reservar memoria, inicializa a 0 la memoria reservada. Se
  usa comúnmente para arreglos y matrices.
 Está definida de esta forma: void *calloc(size_t
  nmemb, size_t size);
 El parámetro nmemb indica el número de elementos a
  reservar, y size el tamaño de cada elemento.
Realloc
   Redimensiona el espacio asignado de forma dinámica
    anteriormente a un puntero.

   Tiene la siguiente definición: void *realloc(void *ptr, size_t size);

   Donde ptr es el puntero a redimensionar, y size el nuevo
    tamaño, en bytes, que tendrá. Si el puntero que se le pasa tiene
    el valor nulo, esta función actúa como malloc. Si la reasignación
    no se pudo hacer con éxito, devuelve un puntero nulo, dejando
    intacto el puntero que se pasa por parámetro. Al usar realloc, se
    debería usar un puntero temporal. De lo contrario, podríamos
    tener una fuga de memoria, si es que ocurriera un error en
    realloc.
Free
 Sirve para liberar memoria que se asignó
  dinámicamente.

 Si el puntero es nulo, free   no hace nada.

 Tiene la siguiente definición: void   free(void *ptr);
Tipos De Duración
 Estática: las variables globales y las variables locales
  declaradas con el especificador “static” tienen duración
  estática. Se crean antes de que el programa inicie su
  ejecución y se destruyen cuando el programa termina.

 Automática: Se crean al entrar al bloque en el que fueron
  declaradas y se destruyen al salir de ese bloque.

 Asignada o Dinámica: Esta memoria se crea y se debe
  liberar de forma explícita.
Apuntadores
 Un apuntador es una variable que contiene       la dirección de
  memoria de otra variable. Se pueden tener apuntadores a
  cualquier tipo de variable. Es importante mencionar que
  sin el uso de los apuntadores en arreglos, estructuras y
  funciones se dificultaría el trabajo a realizar, ya que el
  mismo le ofrece flexibilidad y potencia.
Ventajas y Desventajas

 Es la única forma de expresar algunos cálculos.


 Se genera código compacto y eficiente.


 Es una herramienta muy poderosa.


 Cuando se emplean sin cuidado pueden crear
  programas imposibles de entender.
Operadores de los Apuntadores
   Unario o Monádico “&” devuelve la dirección de memoria de una variable.
         main( )
         {
            int y;
            int *yPtr;
            y = 5;
            yPtr = &y;
           }

   Indirección o Desreferencia “*” devuelve el contenido de un objeto apuntado por un
    apuntador.
          main()
          {
             int x,y;
             int *py;
            y = 5;
            *py = y;
             x = *py + 5;
             printf(''%d %d nn'',*py,x);
           }
Declarar un Apuntador
   Al declarar una variable, el compilador reserva un espacio de
    memoria para ella y asocia el nombre de esta a la dirección de
    memoria.
   Los apuntadores deben ser declarados como cualquier otra
    variable antes de la ejecución.

   Para declarar el apuntador se especifica el tipo de dato que se
    apunta, el operador *, y el nombre del apuntador.

   < Tipo de dato apuntado> * <identificador del apuntador>

   Se asocia un apuntador a un tipo de dato, es por que se debe
    conocer en cuantos bytes esta guardado el dato.
Referenciar un Apuntador
 La referenciación es la obtención de la dirección
  de una variable. En C y C++ esto se hace a través
  del operador ‘&’, aplicado a la variable a la cual se
  desea saber su dirección. Nótese que se trata de
  un operador unario.
Apuntadores y Arreglos
   El nombre de un arreglo es un índice a la dirección de comienzo
    del arreglo. En esencia, el nombre de un arreglo es un puntero al
    arreglo.
   Una variable de tipo arreglo puede considerarse como un
    apuntadora tipo del arreglo.
   Los apuntadores pueden ser utilizados en cualquier operación que
    involucre subíndices de arreglos.
   Cuando se suma 1 a un apuntador el incremento se adecua al
    tamaño en memoria del objeto apuntado.
   Un apuntador es una variable, por lo que operaciones como pa = a
    y pa++ son permitidas.
   Un nombre de un arreglo es una constante, no una variable, de
    ahí que a = pa o a++ o p = a.
Fallos comunes en funciones
   No asignar un apuntador a una dirección de memoria antes de usarlo:
int *x
*x = 100;
Lo adecuado será, tener primeramente una localidad física de
memoria, digamos int y;
int *x, y;
x = &y;
*x = 100;
 Indirección no válida:
Supongamos que se tiene una función llamada malloc() la cual trata de
asignar memoria dinámicamente (en tiempo de ejecución), la cual regresa
un apuntador al bloque de memoria requerida si se pudo o un apuntador
a nulo en otro caso.
GRACIAS!!

Más contenido relacionado

La actualidad más candente

ARRAYS (LISTAS Y TABLAS) EN C++
ARRAYS (LISTAS Y TABLAS) EN C++ARRAYS (LISTAS Y TABLAS) EN C++
ARRAYS (LISTAS Y TABLAS) EN C++
die_dex
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colas
Huascar Génere
 

La actualidad más candente (20)

Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
Oracle Time and Labor (OTL) Setup for Project
Oracle Time and Labor (OTL) Setup for ProjectOracle Time and Labor (OTL) Setup for Project
Oracle Time and Labor (OTL) Setup for Project
 
Programación 3: colas
Programación 3: colasProgramación 3: colas
Programación 3: colas
 
Lista, pilas y colas
Lista, pilas y colasLista, pilas y colas
Lista, pilas y colas
 
Aplicaciòn de las estructuras de datos
Aplicaciòn de las estructuras de datosAplicaciòn de las estructuras de datos
Aplicaciòn de las estructuras de datos
 
Arboles - estructura de datos
Arboles - estructura de datos Arboles - estructura de datos
Arboles - estructura de datos
 
ARRAYS (LISTAS Y TABLAS) EN C++
ARRAYS (LISTAS Y TABLAS) EN C++ARRAYS (LISTAS Y TABLAS) EN C++
ARRAYS (LISTAS Y TABLAS) EN C++
 
Oracle Fusion Cloud HCM value sets
Oracle Fusion Cloud HCM value setsOracle Fusion Cloud HCM value sets
Oracle Fusion Cloud HCM value sets
 
Accrual plan set up in oracle hrms
Accrual plan set up in oracle hrmsAccrual plan set up in oracle hrms
Accrual plan set up in oracle hrms
 
Aspectos de la clase Vector - Java
Aspectos de la clase Vector - JavaAspectos de la clase Vector - Java
Aspectos de la clase Vector - Java
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colas
 
1.4.1 Representación en memoria estática y dinámica.pptx
1.4.1 Representación en memoria estática y dinámica.pptx1.4.1 Representación en memoria estática y dinámica.pptx
1.4.1 Representación en memoria estática y dinámica.pptx
 
Fundamentos de BD - unidad 3 modelo relacional
Fundamentos de BD - unidad 3 modelo relacionalFundamentos de BD - unidad 3 modelo relacional
Fundamentos de BD - unidad 3 modelo relacional
 
Colas en programacion
Colas en programacionColas en programacion
Colas en programacion
 
Colecciones en Scala
Colecciones en ScalaColecciones en Scala
Colecciones en Scala
 
Absence management in oracle HRMS
Absence management in oracle HRMSAbsence management in oracle HRMS
Absence management in oracle HRMS
 
Pilas en Java
Pilas en JavaPilas en Java
Pilas en Java
 
Ordenamiento shell
Ordenamiento shellOrdenamiento shell
Ordenamiento shell
 
Pilas Colas
Pilas ColasPilas Colas
Pilas Colas
 

Destacado (20)

Politica
PoliticaPolitica
Politica
 
Fundaciones de la economia
Fundaciones  de la  economiaFundaciones  de la  economia
Fundaciones de la economia
 
la comunicacion
la comunicacion la comunicacion
la comunicacion
 
informatica
informaticainformatica
informatica
 
Programasaludocupacional
ProgramasaludocupacionalProgramasaludocupacional
Programasaludocupacional
 
Universidad Nacional Autónoma de México
Universidad Nacional Autónoma de MéxicoUniversidad Nacional Autónoma de México
Universidad Nacional Autónoma de México
 
Herramientas web 2.0
Herramientas web 2.0Herramientas web 2.0
Herramientas web 2.0
 
Dolphin Point
Dolphin Point Dolphin Point
Dolphin Point
 
Diversidad del peru
Diversidad del peruDiversidad del peru
Diversidad del peru
 
Trabajo en word (1)
Trabajo en word (1)Trabajo en word (1)
Trabajo en word (1)
 
Terminacion taller de informatica #5
Terminacion  taller  de informatica #5Terminacion  taller  de informatica #5
Terminacion taller de informatica #5
 
Pc zombies, scam, spim,
Pc zombies, scam, spim,Pc zombies, scam, spim,
Pc zombies, scam, spim,
 
La Planta
La PlantaLa Planta
La Planta
 
AULA VIRTUAL Y CORREO INSTITUCIONAL
AULA VIRTUAL  Y CORREO INSTITUCIONALAULA VIRTUAL  Y CORREO INSTITUCIONAL
AULA VIRTUAL Y CORREO INSTITUCIONAL
 
Medios de pago
Medios de pagoMedios de pago
Medios de pago
 
Resumen Carpeta Sin Imagenes
Resumen Carpeta Sin ImagenesResumen Carpeta Sin Imagenes
Resumen Carpeta Sin Imagenes
 
BASE DE DATOS DISTRIBUIDA
BASE DE DATOS DISTRIBUIDABASE DE DATOS DISTRIBUIDA
BASE DE DATOS DISTRIBUIDA
 
WEB 2.0
WEB 2.0WEB 2.0
WEB 2.0
 
Aire agua fuego y tierra
Aire agua fuego y tierraAire agua fuego y tierra
Aire agua fuego y tierra
 
Portafolio final de comercio exterior daniela hernandez
Portafolio final  de comercio exterior daniela hernandezPortafolio final  de comercio exterior daniela hernandez
Portafolio final de comercio exterior daniela hernandez
 

Similar a Administración de memoria y apuntadores

Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
hassanbadredun
 
Apuntadores
ApuntadoresApuntadores
Apuntadores
luisabn
 
Lenguajec 1
Lenguajec 1Lenguajec 1
Lenguajec 1
joeshego
 
Lenguaje c diapositivas
Lenguaje c diapositivasLenguaje c diapositivas
Lenguaje c diapositivas
starduslex
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivas
starduslex
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivas
starduslex
 
Curso lenguaje c_segundo_modulo_
Curso lenguaje c_segundo_modulo_Curso lenguaje c_segundo_modulo_
Curso lenguaje c_segundo_modulo_
Jennybeatriz1
 

Similar a Administración de memoria y apuntadores (20)

Apuntadores y direccionamiento
Apuntadores y direccionamientoApuntadores y direccionamiento
Apuntadores y direccionamiento
 
08 - Punteros en lenguaje C
08 - Punteros en lenguaje C08 - Punteros en lenguaje C
08 - Punteros en lenguaje C
 
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
 
Implementacion de punteros
Implementacion de punterosImplementacion de punteros
Implementacion de punteros
 
Lenguajec diapositivas
Lenguajec diapositivasLenguajec diapositivas
Lenguajec diapositivas
 
Apuntadores
ApuntadoresApuntadores
Apuntadores
 
Lenguajec 1
Lenguajec 1Lenguajec 1
Lenguajec 1
 
Lenguaje c diapositivas
Lenguaje c diapositivasLenguaje c diapositivas
Lenguaje c diapositivas
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivas
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivas
 
Memoria dinamica
Memoria dinamicaMemoria dinamica
Memoria dinamica
 
Programación en c (iii parte)
Programación en c (iii parte)Programación en c (iii parte)
Programación en c (iii parte)
 
Curso lenguaje c_segundo_modulo_
Curso lenguaje c_segundo_modulo_Curso lenguaje c_segundo_modulo_
Curso lenguaje c_segundo_modulo_
 
Trabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaTrabajo programacion 1 jose silva
Trabajo programacion 1 jose silva
 
1.1.5 Gestion de Memoria dinámica con TDA.pptx
1.1.5 Gestion de Memoria dinámica con TDA.pptx1.1.5 Gestion de Memoria dinámica con TDA.pptx
1.1.5 Gestion de Memoria dinámica con TDA.pptx
 
Definición de punteros en C++ en Introducción a la Programación
Definición de punteros en C++ en Introducción a la ProgramaciónDefinición de punteros en C++ en Introducción a la Programación
Definición de punteros en C++ en Introducción a la Programación
 
Punteros y elementos dinámicos en c++
Punteros y elementos dinámicos en c++Punteros y elementos dinámicos en c++
Punteros y elementos dinámicos en c++
 
Introducción
IntroducciónIntroducción
Introducción
 
Introducción
IntroducciónIntroducción
Introducción
 
TUTORIAL LENGUAJE C
TUTORIAL LENGUAJE CTUTORIAL LENGUAJE C
TUTORIAL LENGUAJE C
 

Administración de memoria y apuntadores

  • 2. Memoria Estática • Suele estar alojada en el stack o pila es una zona bastante limitada. • Se utiliza para declarar variables de un tamaño que no podemos modificar en la ejecución del programa. • Procesa los datos más rápidos. • En la memoria estática el tamaño de las variables se conoce en tiempo de compilación, esta información está incluida en el código objeto generado, por lo cual el proceso es muy eficiente.
  • 3. Memoria Dinámica  La memoria dinámica esta alojada en el heap o almacenamiento libre.  Se utiliza cuando el programador desconoce el número de datos o elementos a tratar.  Su tamaño puede variar durante la ejecución del programa.  Es muy lento a comparación con la m. estática, ya que en el tiempo de ejecución es cuando determina la memoria a usar.  Es más difícil de utilizar.
  • 4. Tipos de funciones de la memoria dinámica  Malloc  Calloc  Realloc  Free
  • 5. Malloc  Reserva un bloque de memoria y devuelve un puntero void al inicio de la misma.  Tiene la siguiente definición: void *malloc(size_t size);  Donde el parámetro size especifica el número de bytes a reservar.
  • 6. Calloc  Funciona de modo similar a malloc, pero además de reservar memoria, inicializa a 0 la memoria reservada. Se usa comúnmente para arreglos y matrices.  Está definida de esta forma: void *calloc(size_t nmemb, size_t size);  El parámetro nmemb indica el número de elementos a reservar, y size el tamaño de cada elemento.
  • 7. Realloc  Redimensiona el espacio asignado de forma dinámica anteriormente a un puntero.  Tiene la siguiente definición: void *realloc(void *ptr, size_t size);  Donde ptr es el puntero a redimensionar, y size el nuevo tamaño, en bytes, que tendrá. Si el puntero que se le pasa tiene el valor nulo, esta función actúa como malloc. Si la reasignación no se pudo hacer con éxito, devuelve un puntero nulo, dejando intacto el puntero que se pasa por parámetro. Al usar realloc, se debería usar un puntero temporal. De lo contrario, podríamos tener una fuga de memoria, si es que ocurriera un error en realloc.
  • 8. Free  Sirve para liberar memoria que se asignó dinámicamente.  Si el puntero es nulo, free no hace nada.  Tiene la siguiente definición: void free(void *ptr);
  • 9. Tipos De Duración  Estática: las variables globales y las variables locales declaradas con el especificador “static” tienen duración estática. Se crean antes de que el programa inicie su ejecución y se destruyen cuando el programa termina.  Automática: Se crean al entrar al bloque en el que fueron declaradas y se destruyen al salir de ese bloque.  Asignada o Dinámica: Esta memoria se crea y se debe liberar de forma explícita.
  • 10. Apuntadores  Un apuntador es una variable que contiene la dirección de memoria de otra variable. Se pueden tener apuntadores a cualquier tipo de variable. Es importante mencionar que sin el uso de los apuntadores en arreglos, estructuras y funciones se dificultaría el trabajo a realizar, ya que el mismo le ofrece flexibilidad y potencia.
  • 11. Ventajas y Desventajas  Es la única forma de expresar algunos cálculos.  Se genera código compacto y eficiente.  Es una herramienta muy poderosa.  Cuando se emplean sin cuidado pueden crear programas imposibles de entender.
  • 12. Operadores de los Apuntadores  Unario o Monádico “&” devuelve la dirección de memoria de una variable. main( ) { int y; int *yPtr; y = 5; yPtr = &y; }  Indirección o Desreferencia “*” devuelve el contenido de un objeto apuntado por un apuntador. main() { int x,y; int *py; y = 5; *py = y; x = *py + 5; printf(''%d %d nn'',*py,x); }
  • 13. Declarar un Apuntador  Al declarar una variable, el compilador reserva un espacio de memoria para ella y asocia el nombre de esta a la dirección de memoria.  Los apuntadores deben ser declarados como cualquier otra variable antes de la ejecución.  Para declarar el apuntador se especifica el tipo de dato que se apunta, el operador *, y el nombre del apuntador.  < Tipo de dato apuntado> * <identificador del apuntador>  Se asocia un apuntador a un tipo de dato, es por que se debe conocer en cuantos bytes esta guardado el dato.
  • 14. Referenciar un Apuntador  La referenciación es la obtención de la dirección de una variable. En C y C++ esto se hace a través del operador ‘&’, aplicado a la variable a la cual se desea saber su dirección. Nótese que se trata de un operador unario.
  • 15. Apuntadores y Arreglos  El nombre de un arreglo es un índice a la dirección de comienzo del arreglo. En esencia, el nombre de un arreglo es un puntero al arreglo.  Una variable de tipo arreglo puede considerarse como un apuntadora tipo del arreglo.  Los apuntadores pueden ser utilizados en cualquier operación que involucre subíndices de arreglos.  Cuando se suma 1 a un apuntador el incremento se adecua al tamaño en memoria del objeto apuntado.  Un apuntador es una variable, por lo que operaciones como pa = a y pa++ son permitidas.  Un nombre de un arreglo es una constante, no una variable, de ahí que a = pa o a++ o p = a.
  • 16. Fallos comunes en funciones  No asignar un apuntador a una dirección de memoria antes de usarlo: int *x *x = 100; Lo adecuado será, tener primeramente una localidad física de memoria, digamos int y; int *x, y; x = &y; *x = 100;  Indirección no válida: Supongamos que se tiene una función llamada malloc() la cual trata de asignar memoria dinámicamente (en tiempo de ejecución), la cual regresa un apuntador al bloque de memoria requerida si se pudo o un apuntador a nulo en otro caso.