¿Cómo puedo encontrar la cantidad real de memoria requerida para almacenar un valor de algún tipo de datos en Haskell (principalmente con GHC)? ¿Es posible evaluarlo en tiempo de ejecución (por ejemplo, en GHCi) o es posible estimar los requisitos de memoria de un tipo de datos compuesto a partir de sus componentes?Huella de memoria de los tipos de datos Haskell
En general, si se conocen los requisitos de memoria de tipos a
y b
, ¿cuál es la sobrecarga de memoria de tipos de datos algebraicos tales como:
data Uno = Uno a
data Due = Due a b
Por ejemplo, el número de bytes en la memoria no ocupan estos valores?
1 :: Int8
1 :: Integer
2^100 :: Integer
\x -> x + 1
(1 :: Int8, 2 :: Int8)
[1] :: [Int8]
Just (1 :: Int8)
Nothing
Entiendo que la asignación de la memoria real es mayor debido a la recolección diferida de basura. Puede ser significativamente diferente debido a la evaluación diferida (y el tamaño del procesador no está relacionado con el tamaño del valor). La pregunta es, dado un tipo de datos, ¿cuánta memoria tiene su valor cuando se evalúa por completo?
Encontré que hay una opción :set +s
en GHCi para ver las estadísticas de memoria, pero no está claro cómo estimar la huella de memoria de un solo valor.
Gracias, Simon. Esto es exactamente lo que quería saber. – sastanin
¿No es el encabezado dos palabras? Uno para la etiqueta, y otro para el puntero de reenvío para usar durante GC o evaluación? Entonces, ¿no agregaría eso una palabra a tu total? –
¿Proporcional a su valor o proporcional al logaritmo del mismo? – solidsnack