Haskell (대부분 GHC 사용)에 일부 데이터 유형의 값을 저장하는 데 필요한 실제 메모리 양을 어떻게 찾을 수 있습니까? 런타임시 (예 : GHCi에서) 평가할 수 있습니까? 아니면 구성 요소에서 복합 데이터 유형의 메모리 요구 사항을 추정 할 수 있습니까?
일반적 유형의 메모리 요구하는 경우 a
와 b
공지 같은 대수 데이터 유형의 메모리 오버 헤드는 무엇인가
data Uno = Uno a
data Due = Due a b
예를 들어, 이러한 값은 메모리에서 몇 바이트를 차지합니까?
1 :: Int8
1 :: Integer
2^100 :: Integer
\x -> x + 1
(1 :: Int8, 2 :: Int8)
[1] :: [Int8]
Just (1 :: Int8)
Nothing
지연된 가비지 수집으로 인해 실제 메모리 할당이 더 높다는 것을 알고 있습니다. 지연 평가로 인해 상당히 다를 수 있습니다 (그리고 썽크 크기는 값의 크기와 관련이 없습니다). 질문은 데이터 유형이 주어지면 그 값이 완전히 평가 될 때 얼마나 많은 메모리를 차지합니까?
:set +s
GHCi에는 메모리 통계를 볼 수 있는 옵션이 있지만 단일 값의 메모리 사용량을 추정하는 방법은 명확하지 않습니다.