Kitaplık belgeleri olarak newCString
ile oluşturulan CString
işlevi free
işleviyle serbest bırakılmalıdır. Ben CString
oluşturulduğunda biraz bellek alır ve free
bellek kullanımı ile serbest bırakıldığında aşağı gideceğini bekliyordum, ama yoktu! İşte örnek kod: Program (1), htop
programı bellek kullanımı 410m etrafında bir yerde olduğunu gösterdi durdunewCString ile ayrılmış bellek boşaltma
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)
- bu sorun yok. Enter'a basıyorum ve program hat (2) 'de durur, ancak cs
free
d olmasına rağmen bellek kullanımı hala 410M'dir d!
Bu nasıl olabilir? C olarak yazılan benzer program gerektiği gibi davranır. Burada neyi özlüyorum?
Hangi GHC sürümünü kullanıyorsunuz? Hafızaya işletim sistemine geri dönüş yeteneği sadece geçen sene GHC'ye eklendi. –
'ghc --version' çıktıları The Glorious Glasgow Haskell Derleme Sistemi, sürüm 7.4.1' –