Manejo de memoria dinámica

Solo disponible en BuenasTareas
  • Páginas : 5 (1086 palabras )
  • Descarga(s) : 0
  • Publicado : 27 de septiembre de 2010
Leer documento completo
Vista previa del texto
1

A la asignación de memoria para algunos elementos fijos del programa que es controlada por el compilador se le llama asignación de memoria estática. A la asignación y posible recuperación de memoria durante la ejecución de un programa y bajo su control, se le llama asignación de memoria dinámica.
2

Define la cantidad de memoria necesaria para un programa durante el tiempo decompilación. El tamaño no puede cambiar durante el tiempo de ejecución del programa. Algunos lenguajes de programación utilizan la palabra static para especificar elementos del programa que deben almacenarse en memoria estática.
3

Elementos que residen en memoria estática:
› Código del programa › Las variables definidas en la sección principal

del programa. › Todas aquellas variables declaradas comoestáticas en otras clases o módulos.

4

5

6

Cuando se ejecuta un programa se reservan en memoria: Zona de datos: Variables globales y las constantes. Stack: almacenará los parámetros de las funciones, las variables locales y los valores de retorno de los métodos. Heap: zona para la gestión dinámica de memoria.

7

IP (instruction pointer)

SP (stack pointer)

Para ejecutarel programa, el sistema operativo indica al CPU que apunte con el registro del puntero de Instrucciones (IP) a la primera instrucción del código, y al puntero de pila (SP) a la primera dirección del área reservada para la pila. 8

Todas las aplicaciones tienen un punto de entrada (la función main o similar). (Cuando empieza la ejecución, el IP de la CPU apunta a la dirección de este punto deentrada.)

9

Una pila es una estructura de datos en la cual, el último elemento en llegar es el primero en salir. En cada llamada a un método, en la pila se almacena lo siguiente:
› La dirección a la que se debe retornar después de la

llamada, es decir, la dirección de la instrucción siguiente a la propia llamada. › Los datos pasados como parámetros de la llamada. › Las variables localesutilizadas por la función llamada › Si la función devuelve algo, lo dejará en la pila también.
10

01 02 04 05 06 07 07 09 10 11 12 14 15 16 17 18 19

class Program { static int metodo1(int a) { int b = metodo2(a+6); return a + b; } static int metodo2(int c) { return c - 3; } public static void main(String[] args) { System.out.println(metodo1(43)); System.out.println("Fin"); } }
11

01 0204 05 06 07 07 09 10 11 12 14 15 16 17 18 19

class Program { static int metodo1(int a) { int b = metodo2(a+6); return a + b; } static int metodo2(int c) { return c - 3; }

Cuando desde la función main se llama a metodo1, en la pila se almacenan
› 43 › Dir. Retorno

public static void main(String[] args) { System.out.println(metodo1(43)); System.out.println("Fin"); } }

Línea 16

12 01 02 04 05 06 07 07 09 10 11 12 14 15 16 17 18 19

class Program {

Cuando empieza la static int metodo1(int a) ejecución { int b = metodo2(a+6); de método1, return a + b; éste } necesita un static int metodo2(int c) parámetro: { a, que se return c - 3; } encontrará public static void main(String[] args) en la pila, { con valor System.out.println(metodo1(43)); a=43.System.out.println("Fin");
}
13

}

01 02 04 05 06 07 07 09 10 11 12

class Program { static int metodo1(int a) { int b = metodo2(a+6); return a + b; } static int metodo2(int c) { return c - 3; }

A su vez, método1 llama a metodo2, pasándole como parámetro un 49, resultado de 43+6. Antes de la llamada deja la dirección de retorno de la pila.
› 49 › Dir. Retorno Línea 06 › 43 › Dir. Retorno Línea 16

14public static void main(String[] args) 15 { 16 System.out.println(metodo1(43)); 17 System.out.println("Fin"); 18 } 19 }

14

01 02 04 05 06 07 07 09 10 11 12

class Program { static int metodo1(int a) { int b = metodo2(a+6); return a + b; } static int metodo2(int c) { return c - 3; }

Cuando empieza metodo2, éste necesita un parámetro, que irá a buscar a la pila. Encuentra el 49, entonces...
tracking img