Estás en: Inicio >> Foros >> Informática >> Programación
Programación /

ocupacion de memoria en una lista enlazada en pascal

Participa en el tema ocupacion de memoria en una lista enlazada en pascal en el foro Programación.
Hola aver si alguien me podria sacar una duda que tengo para calcular el espacio ...

Buscar en este tema:
 
  •  
    #1 ocupacion de memoria en una lista enlazada en pascal
    Hola aver si alguien me podria sacar una duda que tengo para calcular el espacio de memoria que se estaria ocupando al tener una lista simplemente enlasada... El calculo que yo hago es el que sigue comparandolo con un arreglo:

    en el arreglo si quiero almacenar 100 elementos de 30 bytes cada uno, al comenzar el programa se reservan los 3kB 30 * 100 y esto es fijo hasta que finaliza el programa.

    si quiero usar una lista hago este calculo:

    al empezar el programa se reservan 4 bytes para el puntero, suponiendo que los 30 bytes pertenecen a un string de 30 caracteres usaria un registro con el campo string y un campo tipo puntero para el siguiente, en total tendria 31 bytes + 4 byte del puntero, entonces si la lista se completa tendria que hacer 35 * 100? esta bien asi el calculo? o se me olvida algo? pascal usa un byte mas en los tipos string por eso puse 35, y digo * 100 suponiendo que la lista se completo y se hicieron 100 new(t_puntero), espero haber sido claro con mi duda, saludos.
    +
     
    0
    Me gusta
     
    | Más
  • #2 Re: ocupacion de memoria en una lista enlazada en pascal

    Sumando los elementos del registro podés calcular el espacio mínimo que ocupa. Sin embargo, suele ser más que eso.

    Primero está el padding dentro de la misma estructura. El procesador sólo maneja enteros/punteros/etc en direcciones de memoria que sean múltiplos de 2/4/8 bytes (depende), por lo tanto el compilador pone los datos de la estructura de manera que queden alineados de esa manera. Si tenés 31 bytes de string y un puntero, el puntero seguramente empezará en el byte 33 (en vez del 32) y se desperdiciará un byte en el medio. Los bytes al final, hasta llegar al próximo múltiplo, también se desperdician.
    Después está el overhead de New. La función necesita mantener cierta información (oculta), como qué bloques de memoria están libres, cuánto ocupa cada alocación (para que Dispose libere sólo lo necesario) (esto último no es tan necesario en Pascal), etc.
    Y por último, la fragmentación de la memoria dinámica: si se piden y liberan muchos bloques de memoria de distintos tamaños, puede quedar la memoria con muchos huecos demasiado chicos para aprovecharlos; más memoria desperdiciada.

    El problema es que estos factores dependen del compilador y no suelen estar documentados. En algunos pascales existe la función SizeOf, que te da el tamaño de un registro incluyendo el padding, pero los otros factores son más difíciles de calcular.
    Me gusta este mensaje
Estás en: Inicio >> Foros >> Informática >> Programación


Estadísticas del tema
  • 1 RESPUESTA
  • 245 VISTAS
  • 2 USUARIOS RESPONDIERON
 
Ir arriba
Contacto | Acerca de | Ayuda | Términos Legales | privacidad | Pautas de convivencia | Mapa de los foros | TrabajÁ con nosotros
©2008 Psicofxp.com S.A. - Todos los derechos reservados
Certifica IAB