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
ガベージコレクションが遅れているため、実際のメモリ割り当てが多いことを理解しています。遅延評価のために大幅に異なる場合があります(サンクサイズは値のサイズとは関係ありません)。問題は、データ型が与えられた場合、完全に評価されたときにその値がどのくらいのメモリを消費するかということです。
GHCiにはメモリ統計を表示するオプションがあることがわかりましたが:set +s
、単一の値のメモリフットプリントを見積もる方法が明確ではありません。