Haskell/GHC内存使用情况

Yan*_*and 1 memory crash haskell ghc

我正在玩Haskell并编写文件.这是一段代码,对于[0..255]中的每个"蓝色",在[0..255]中使用"红色"和"绿色"在PPM中创建图像.它在文件夹中生成所有图像.

这个小程序使我的计算机崩溃购买超过5 gB的内存,我不知道为什么.我要他做的事对我来说似乎很简单,生成的图像占用的总空间是 - 200 mB ......并且不明白为什么内存会爆炸.

这是代码:

import System.Directory
import Data.Colour.SRGB
import Data.List.Split

gridColours         = [[RGB 255 0 0, RGB 0 255 0], [RGB 0 0 255, RGB 0 0 0]]
gridColours2 b      = chunksOf 256 [RGB r g b| r <- [0..255], g <- [0..255]]

dimensions l        = (length . head $ l, length l)
coupleToList (a,b)  = [a,b]
genDataLines list   = unwords . (map showColour) . concat $ list
genDims list        = unwords . (map show) . coupleToList . dimensions $ list
writePPM list path  = writeFile path $ unwords $ ["P3", genDims list, "255", genDataLines list]
showColour c        = unwords . (map show) $ [channelRed c, channelGreen c, channelBlue c]

main = do
    createDirectoryIfMissing True "/tmp/PPM-out/"
    mapM_ (\x -> writePPM (gridColours2 x) ("/tmp/PPM-out/image"++(show x)++".ppm")) [0..255]
Run Code Online (Sandbox Code Playgroud)

一个完美的答案可以解释我做错了什么,并给我建议如何解决这个问题的内存到我的系统崩溃.

谢谢.

Dan*_*ner 5

编译而不是从ghci中运行.在我的机器上,这需要5GB到140MB的使用率; 对于编译版本,res从未超过约15MB.通常(除了极少数例外),ghci的性能特征比编译程序的性能特征要差得多.