Ответ 1
Да. Куча GHC не сохраняется в одном непрерывном участке памяти; скорее, организован в блоки.
Когда размер выделенных объектов превышает определенный порог (block_size * 8/10, где block_size равен 4k, что примерно равно 3.2k), блок, содержащий объект, помечен как большой (BF_LARGE). Теперь, когда происходит сбор мусора, вместо копирования больших объектов из этого блока в новый, сам блок добавляется в набор блоков нового поколения; это включает возиться со связанным списком (точнее, с большим списком объектов).
Так как это означает, что нам может потребоваться некоторое время для восстановления мертвого пространства внутри большого блока, это означает, что большие объекты могут пострадать от фрагментации, как видно из ошибки 7831. Однако это обычно не происходит, пока отдельные распределения не достигнут половины размера мегаблока, 1M.