Подтвердить что ты не робот

Что означает PINNED в -hc профиле программы Haskell?

Я пытаюсь профилировать свое приложение. При анализе использования памяти с опцией -hc RTS я заметил большую память, отмеченную как PINNED. При работе с -hy память помечена как ARR_WORDS.

Программа создает матрицу удвоений 2400 × 2400, используя модуль Data.Packed.Matrix из пакета hmatrix, и поскольку элементы в ней должны храниться в непрерывной памяти, я не вижу способа, чтобы матрица так сильно занялась пространство.

enter image description here

Мой вопрос: что означает слово PINNED? Также есть ли способ получить дополнительную информацию о том, почему и где используется память?

Весь исходный код, о котором идет речь, на GitHub, должен кого-то интересовать. Тем не менее, это очень далекий от минимального примера.

4b9b3361

Ответ 1

Данные "Pinned" означают, что сборщик мусора не может его перемещать. Это помогает, например, передавать данные в функции C через FFI. Вы не хотите, чтобы GC перемещал данные во время выполнения вызова C.

Soylet Green дал ссылку выше (https://ghc.haskell.org/trac/ghc/wiki/Commentary/Rts/Storage/GC/Pinned).