ライブラリドキュメントではで作成したCString
をfree
関数で解放する必要があります。私はCString
が作成されるといくらかのメモリが必要になると予想しており、free
のメモリ使用量がリリースされると、メモリ使用量は減少しますが、それはありませんでした!ここでのコード例である:プログラム(1)は、htop
プログラムは、メモリ使用量が410Mの周りのどこかであることを示した時に停止newCStringで割り当てられたメモリを解放する
module Main where
import Foreign
import Foreign.C.String
import System.IO
wait = do
putStr "Press enter" >> hFlush stdout
_ <- getLine
return()
main = do
let s = concat $ replicate 1000000 ['0'..'9']
cs <- newCString s
cs `seq` wait -- (1)
free cs
wait -- (2)
- これはOKです。私はenterを押して、プログラムは行(2)で停止しますが、cs
がfree
dでしたが、メモリ使用量はまだ410Mです!
これはどのように可能ですか? Cで書かれた同様のプログラムは、必要なように動作します。私はここで何が欠けていますか?
あなたが使用しているGHCのバージョン? OSにメモリを返す機能は、昨年GHCに追加されました。 –
'ghc --version'は' The Glorious Glasgow Haskell Compilation System、version 7.4.1'を出力します。 –