52700.fb2 Учебник по Haskell - читать онлайн бесплатно полную версию книги . Страница 178

Учебник по Haskell - читать онлайн бесплатно полную версию книги . Страница 178

очистку (major GC). Эта схема соответствует сборке с двумя поколениями.

10.6 Статистика выполнения программы

Процесс управления памятью скрыт от программиста. Но при этом в GHC есть развитые средства косвен-

ной диагностики работы программы. Пока мы пользовались самым простым способом проверки. Мы вклю-

чали флаг s в интерпретаторе. Пришло время познакомиться и с другими.

Управление памятью. Сборщик мусора | 163

Статистика вычислителя

Для начала научимся смотреть статистику работы вычислителя. Посмотреть статистику можно с помо-

щью флагов s[file] и S[file]. Эти флаги предназначены для вычислителя низкого уровня (realtime system

или RTS, далее просто вычислитель), они заключаются в окружение +RTS ... -RTS, если флаги идут в кон-

це строки и считается, что все последующие флаги предназначены для RTS мы можем просто написать ghc

–make file.hs +RTS ... Например скомпилируем такую программу:

module Main where

main = print $ sum [1 .. 1e5]

Теперь скомпилируем:

$ ghc --make sum.hs -rtsopts -fforce-recomp

Флаг rtsopts позволяет передавать скомпилированной программе флаги для вычислителя низкого уров-

ня, далее для краткости мы будем называть его просто вычислителем. С флагом fforce-recomp программа

будет каждый раз заново пересобираться. Теперь посмотрим на статистику выполнения программы (флаг

s[file], в этом примере мы перенаправляем выход в поток stderr):

$ ./sum +RTS -sstderr

5.00005e9

14,145,284 bytes allocated in the heap

11,110,432 bytes copied during GC

2,865,704 bytes maximum residency (3 sample(s))

460,248 bytes maximum slop

7 MB total memory in use (0 MB lost due to fragmentation)

Tot time (elapsed)

Avg pause

Max pause

Gen

0

21 colls,

0 par

0.00s

0.01s

0.0006s

0.0036s

Gen

1

3 colls,

0 par

0.01s

0.01s

0.0026s

0.0051s

INIT

time

0.00s

(