Es la memoria que se reserva en el momento de la compilación antes de comenzar a ejecutar el programa. Los objetos son creados al iniciar el programa y destruidos al finalizar el mismo. Mantienen la misma localización en memoria durante todo el transcurso del programa hasta que son destruidos
Los objetos administrados de este modo son: variables globales, variables estáticas de funciones, miembros static de clases y literales de cualquier tipo.
Características:
Su principal característica es que ocupan solo una casilla de memoria, por lo tanto una variable simple hace referencia a un único valor a la vez, dentro de este grupo de datos se encuentra: enteros, reales, caracteres, booleanos, enumerados y subrangos (los últimos no existen en algunos lenguajes de programación)
El inconveniente de la reserva estática es que la cantidad de memoria se reserva siempre antes de conocer los datos concretos del problema.
Tampoco se adapta bien a la memoria real disponible del ordenador en que se esta ejecutando el programa.
Las estructuras de datos estáticas:
Son aquellas en las que el tamaño ocupado en memoria se define antes de que el programa se ejecute y no puede modificarse dicho tamaño durante la ejecución del programa.
La forma más fácil de almacenar el contenido de una variable en memoria en tiempo de ejecución es en memoria estática o permanente a lo largo de toda la ejecución del programa. No todos los objetos (variables) pueden ser almacenados estáticamente. Para que un objeto pueda ser almacenado en memoria estática su tamaño (número de bytes necesarios para su almacenamiento) ha de ser conocido en tiempo de compilación. Como consecuencia de esta condición no podrán almacenarse en memoria estática:
Los objetos correspondientes a procedimientos o funciones recursivas, ya que en tiempo de compilación no se sabe el número de variables que serán necesarias.
Las estructuras dinámicas de datos tales como listas, árboles, etc. ya que el número de elementos que las forman no es conocido hasta que el programa se ejecuta.
Ejemplo en C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _1._2
{
public class ejemploestatica
{//Declaracion de un arreglo static string con datos predefinidos, la memoria designada al arreglo esta presente desde el inicio del programa hasta el cuando se libera static String[] instruccion = new String[] { "nPais: estados unidosncapital: Washington DC ", "nPais: Estados unidos Mexicanosncapital: Mexico DF", "nPais: Alemaniancapital: Berlin" };
public static void imp (int a){ //metodo estatico en donde se realiza la impresion de un bloque del arreglo el que elija el usuario
try //inicio del bloque try que capturar el error cuando el usuario elija una opcion que exceda al arreglo
{
Console.Clear();
Console.Write("Datos Pais: {0}", instruccion[a-1]);
}
catch (Exception e)//en el catch el exception esta bien, pero con ella se pueden usar los metodos de su clase para desplegar datos del error
{ }
}
public static void Main()
{
int s;
//menu do
{
Console.Clear();
Console.Write("Menu Paisesn1.-EUAn2.-Mexicon3.-Alemanian4.-Salir";
Console.Write("nIngrese opcion: ";
s = int.Parse(Console.ReadLine());
imp(s); //llamada al menu como es estatico no se tiene que crear objeto se envia la variable "s" como parametro para que el metodo elija el bloque del arreglo
Console.ReadKey();
} while (s != 4);
Console.ReadKey();
}
}
}
Aquí se despliega el menú.
Aquí se ven los datos que contiene el arreglo.
Memoria Dinámica
La reserva de memoria dinámica se hace en tiempo de ejecución después de leer los datos y de conocer el tamaño exacto del problema. Como consecuencia se adapta mucho mejor a las necesidades en cada caso.
El sitio donde se almacenan los objetos se denominan en ingles heap o free store traducido como montículo o memoria libre, y el sitio preciso donde se encuentre depende del compilador y el tipo de puntero utilizado. La creación y destrucción de los objetos esta en manos del programador a través de los operadores new y delete.
VENTAJAS:
ü Es posible disponer de un espacio de memoria arbitrario que dependa de información dinámica (disponible sólo en ejecución): Toda esa memoria que maneja es implementada por el programador cuando fuese necesario.
ü Otra ventaja de la memoria dinámica es que se puede ir incrementando durante la ejecución del programa. Esto permite, por ejemplo, trabajar con arreglos dinámicos.
ü Es memoria que se reserva en tiempo de ejecución. Su tamaño puede variar durante la ejecución del programa y puede ser liberado mediante la función free.
Ejemplo en C#
Programa en Estructura de datos C# que utiliza manejo de memoria dinámica
Código Fuente
using System;
using System.Collections.Generic;
using System.Text;
class Program
{
void imprime_binario(int n)
{
if (n >= 2)
{
imprime_binario(n / 2);
Console.Write("{0 % 2);
}
else
{
Console.Write("{0);
}
}
static void Main(string[] args)
{
Console.Write("Introduzcaumero Entero: ");
int numero = Int32.Parse(Console.ReadLine());
Program p = new Program();
Console.Write("\nNumeroro: {0}, en Codigo Binario: ", numero);
p.imprime_binario(numero);
Console.ReadLine();
}
}
Programacion en C, memoria dinamica