Definición Random Access Memory, normalmente conocida como
Memoria RAM) es un tipo de dispositivo de almacenamiento de
datos. Adopta la forma de circuitos integrados en pequeñas
tarjetas que permiten que los datos se almacenen y sea accesible
a ellos mediante ordenes. La RAM es una memoria volátil,
que significa que la información o instrucciones que
almacena en ella se pierden en el momento que deja de recibir
voltaje.
RAM (ESTATICA Y DINAMICA) RAMs se dividen en estáticas y
dinámicas. Una Memoria RAM estática mantiene su
contenido mientras esté alimentada. En cambio, en una
Memoria RAM dinámica la lectura es destructiva, es decir
que la información se pierde al leerla, para evitarlo hay
que restaurar la información contenida en sus celdas,
operación denominada refresco. Cada celda de la RAM tiene
una ubicación o nombre en una nomenclatura aceptada por la
comunidad científica: el sistema hexadecimal. Cada
depósito de un dato en la memoria (operando, resultado,
etc.) se ubica por una dirección en hexadecimal.
Programación de la memoria = algoritmos (sistemas) + uso
de memoria Es la aplicación de los algoritmos para
optimizar el uso de la memoria del computador
Optimización de la memoria Se puede optimizar el uso de
memoria a través de: ESTRUCTURAS ESTATICAS (desde la
compilación reservan un espacio fijo de elementos)
Arreglos (vectores 1 dimensión y matriz de n dimensiones)
ESTRUCTURAS DINÁMICAS (en la ejecución varia el
número de elementos y uso de memoria a lo largo del
programa) Lineales (listas enlazadas, pilas y colas) No lineales
(arboles y grafos o redes)
Asignación de información en celdas de memoria
Memoria global (“estática”). Es la usada por
variables globales y cadenas constantes. Memoria local Es la
usada por variables declaradas dentro de funciones. Los
argumentos de una función son variables locales. Memoria
dinámica Esta memoria se puede pedir en cualquier momento
de la ejecución con una llamada a malloc Memory Allocation
función de asignación de memoria dinámica de
C y C++
Liberación de memoria La memoria global se libera
automaticamente al terminar el programa. La memoria local se
libera automaticamente al terminar la invocación a funcion
que la creo. La memoria dinámica se puede liberar en
cualquier momento de la ejecucion pasandole un puntero al bloque
de memoria a la función free.
Funciones predefinidas de manejo de memoria dinámica en C
y C++ Función calloc().- void *calloc(int num, int tam);
Reserva un bloque de memoria para almacenar num elementos de tam
bytes cada uno de ellos. Función malloc().-void
*malloc(int tam); (tambien con new) Reserva un bloque de memoria
de tam bytes. Función realloc().-void *realloc(void *ptr,
int nuevo_tamaño); Cambia el tamaño del bloque de
memoria apuntada por ptr al nuevo tamaño indicado por
nuevo_tamaño Función free().-void free(void *ptr);
Libera el bloque de memoria apuntada por ptr y que previamente ha
sido asignado mediante malloc() o calloc().
RECURSIVIDAD: La recursividad es una técnica de
programación que nos permite la reducción de
código, la programación de procesos y el manejo de
la memoria principal. Se utiliza para realizar una llamada a una
función desde la misma función.
Ejemplo: Por ejemplo GNU, es un acrónimo (una sigla que se
pronuncia como palabra) recursivo (GNU’s Not Unix), ya que
la G en GNU, significa GNU, cuya G significa GNU, y así
recursivamente…
Tipos de recursividad: Una función se puede llamar a
sí misma, a este proceso se le llama recursividad y puede
ser directa e indirecta. Directa cuando una función se
llama a sí misma. Recursividad indirecta cuando una
función llama a otra función y ésta
última llama a la primera.
Formas de recursividad Pora Ambos tipos de recursividad se dan en
dos formas, aquellas que eventualmente terminan y producen un
resultado y el caso en que la recursividad nunca termina
produciendo un bucle infinito y de aquí una falla en
tiempo de ejecución por falta de memoria. (principio de la
generación de virus)
EJEMPLO: La serie de Fibonacci