Скажем, у меня очень большое число (миллионы/миллиарды +) этих простых структур данных Foo
:
data Foo = Foo
{ a :: {-# UNPACK #-}!Int
, b :: Int
}
С таким количеством плавающих вокруг необходимо подумать о том, сколько памяти они потребляют.
На 64-битной машине каждый Int
составляет 8 байтов, поэтому a
занимает всего 8 байтов (потому что он строгий и распакованный). Но сколько памяти займет b
? Я предполагаю, что это изменится в зависимости от того, оценивается ли тон или нет, не так ли?
Я предполагаю, что в общем случае это невозможно сказать, потому что b
может зависеть от любого количества позиций памяти, которые остаются только в памяти, в случае, если b
необходимо оценить. Но что, если b
зависело только от (очень дорогостоящей операции) a
? Тогда существует ли детерминированный способ определить, сколько памяти будет использовано?