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

PPTX
Arboles presentacion
PPTX
ODP
Arbol rojo y negro
DOCX
Población y Muestra (Ejemplo)
PPTX
Matemáticas discretas- Teoría de Grafos
PPT
Tratamiento termico
PPTX
Operaciones de procesos
PPSX
Sistemas de Razonamiento Lógico
Arboles presentacion
Arbol rojo y negro
Población y Muestra (Ejemplo)
Matemáticas discretas- Teoría de Grafos
Tratamiento termico
Operaciones de procesos
Sistemas de Razonamiento Lógico

La actualidad más candente (6)

PDF
Examen Arquitectura de Computadoras
PPTX
망고100 보드로 놀아보자 8
PDF
Computacion movil mapa conceptual
PDF
SO - Administración de Memoria
PDF
Árboles AA
PPTX
Ordenamiento en C++
Examen Arquitectura de Computadoras
망고100 보드로 놀아보자 8
Computacion movil mapa conceptual
SO - Administración de Memoria
Árboles AA
Ordenamiento en C++
Publicidad

Destacado (20)

PDF
Politica
PPTX
Fundaciones de la economia
PDF
la comunicacion
PPTX
informatica
PDF
Programasaludocupacional
PPTX
Universidad Nacional Autónoma de México
PDF
Herramientas web 2.0
PPSX
Dolphin Point
PPT
Diversidad del peru
DOCX
Trabajo en word (1)
PPTX
Terminacion taller de informatica #5
PPT
Pc zombies, scam, spim,
DOCX
La Planta
PPTX
AULA VIRTUAL Y CORREO INSTITUCIONAL
PPT
Medios de pago
DOC
Resumen Carpeta Sin Imagenes
PPTX
BASE DE DATOS DISTRIBUIDA
PPTX
WEB 2.0
PPS
Aire agua fuego y tierra
PDF
Portafolio final de comercio exterior daniela hernandez
Politica
Fundaciones de la economia
la comunicacion
informatica
Programasaludocupacional
Universidad Nacional Autónoma de México
Herramientas web 2.0
Dolphin Point
Diversidad del peru
Trabajo en word (1)
Terminacion taller de informatica #5
Pc zombies, scam, spim,
La Planta
AULA VIRTUAL Y CORREO INSTITUCIONAL
Medios de pago
Resumen Carpeta Sin Imagenes
BASE DE DATOS DISTRIBUIDA
WEB 2.0
Aire agua fuego y tierra
Portafolio final de comercio exterior daniela hernandez
Publicidad

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

DOC
Apuntadores y direccionamiento
PDF
08 - Punteros en lenguaje C
PDF
Tema 1 Memoria y Punteros.pdf...........
PDF
Implementacion de punteros
PPT
Lenguajec diapositivas
DOCX
Apuntadores
PPT
Lenguajec 1
PPSX
Lenguaje c diapositivas
PPSX
Lenguajes diapositivas
PPSX
Lenguajes diapositivas
PPTX
PPTX
Definiciones de variables en programación
PPTX
Programación en c (iii parte)
PPT
Curso lenguaje c_segundo_modulo_
DOCX
Trabajo programacion 1 jose silva
PPTX
1.1.5 Gestion de Memoria dinámica con TDA.pptx
PDF
Definición de punteros en C++ en Introducción a la Programación
PPTX
Punteros y elementos dinámicos en c++
PPTX
Introducción
PPTX
Introducción
Apuntadores y direccionamiento
08 - Punteros en lenguaje C
Tema 1 Memoria y Punteros.pdf...........
Implementacion de punteros
Lenguajec diapositivas
Apuntadores
Lenguajec 1
Lenguaje c diapositivas
Lenguajes diapositivas
Lenguajes diapositivas
Definiciones de variables en programación
Programación en c (iii parte)
Curso lenguaje c_segundo_modulo_
Trabajo programacion 1 jose silva
1.1.5 Gestion de Memoria dinámica con TDA.pptx
Definición de punteros en C++ en Introducción a la Programación
Punteros y elementos dinámicos en c++
Introducción
Introducción

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.