B.Semana 3 - HazelMartinez/Portafolio- GitHub Wiki

Martes 06 de Agosto 2019

Gestión de Memoria:

Desde la perspectiva del programa *Un programa en ejecución es un proceso. *La forma de cargar la memoria depende del lenguaje de programación. *En memoria solo se guarda una copia del programa.

Stack

  1. Se basa en LIFO el primero que entra es el ultimo en salir. Es como la pila de platos. Se lava el que esta de primero, es decir el ultimo que se colocó.
  2. Está compuesto de Stack Frames: Cada Frame corresponde a una llamada. ¿Qué pasa con el Stack Frame cuando hay llamadas recursivas? En resumen cada vez que se llama el metodo se crea un nuevo frame hasta que cumpla la condicion de parada y a partir de ahi se van resloviendo lo demas frames hasta llegar al primero y si no llega a esta condicion se crearan mas frames hasta llenar el stack

Se almacenan tres cosas:

*Un espacio reservado para las variables automáticas. *La línea para saber donde tiene que volver después de ejecutar la línea. *Argumentos o parámetros de la función a la que estoy llamando.

El stack es su amigo. Es transparente al programador. Gestiona la memoria por si mismo. Al liberar un stack frame, todo ese almacenamiento se libera.

Heap

No se gestiona de forma automática. El programador tiene interacción directa con el Heap. ¿Usted interactuá con el stack? Sí pero no directamente.

Interactuamos directamente con el Heap por: *Asiganacion de memoria *Desasignar memoria *Liberar memoria

El lenguaje de programacion nos provee el API *Malloc *Calloc *Realloc : Reasignar y editar memoria *Free : Liberar memoria

¿Cual es la diferencia entre Malloc y Calloc? Hay dos diferencias principales entre malloc y callocen el lenguaje de programación C: primero, en el número de argumentos. El malloc()toma un solo argumento, mientras que calloc()toma dos. Segundo, malloc()no inicializa la memoria asignada, mientras que calloc()inicializa la memoria asignada a CERO.

Ambos mallocy calloc se utilizan en lenguaje C para la asignación dinámica de memoria obtienen bloques de memoria dinámicamente.

Similitudes entre Malloc y Calloc

El puntero devuelto por malloc o calloc tiene la alineación adecuada para el objeto en cuestión, pero debe convertirse en el tipo apropiado.

La alineación adecuada significa que el valor de la dirección devuelta está garantizado como un múltiplo uniforme de alineación. El valor de la alineación debe ser una potencia de dos y debe ser mayor o igual que el tamaño de una palabra.

El malloc(), calloc() funciones fallarán si:

Los límites físicos del sistema son excedidos por nbytes de memoria que no pueden asignarse. No hay suficiente memoria disponible para asignar nbytes de memoria; pero la aplicación podría volver a intentarlo más tarde.

¿Puedo evitar interactuar con el Heap? Sí, algunos lenguajes no permiten interactuarlo.

Una advertencia: Si se evita usar, no se interesan las estructuras de datos.

Perdida de memoria: Dejar bloques de memoria.

¿Cuando crear variables en el Heap o en el Stack?

Heap: Cuando ocupo asignar bloques grandes memoria. Ejemplo: Listas.

Stack: Variables pequeñas. Ejemplo: Integer. O si solo se ocupan mientras el método se ejecuta.

Ventajas y desventajas del Heap vs Stack

Punteros. ¿Acciones que se pueden hacer con los punteros? Con los punteros se puede manipular memoria. Cuando una variable se declara se asigna a memoria. El no almacena el valor directamente sino que lo que hace es apuntar a la dirección de memoria. Un puntero almacena una referencia a otro valor.

El espacio de memoria se elimina cuando se hace Return

Un puntero en C es un tipo de dato especial:

  • int*

  • double*

  • char*

  • < struct >*

  • void*

  • and many more

El puntero siempre va a tener un integer de espacio. ¿Cuanto espacio se guarda para las variables? Un integer.

⚠️ **GitHub.com Fallback** ⚠️