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にはメモリ統計を表示するオプションがあることがわかりましたが、単一の値のメモリフットプリントを推定する方法は明確ではありません。