Voglio prendere i primi cinque byte dal file pugno nell'archivio zip. Io uso pacchetto zip-archivio per la decompressione:Come eseguire pigri test dall'archivio zip senza overflow di heap
import qualified Data.ByteString.Lazy as L
import Data.Maybe
import System.Environment (getArgs)
import Codec.Archive.Zip
main = do
f:_ <- getArgs
print . L.take 5 . fromEntry . head . zEntries . toArchive =<< L.readFile f
Questo codice funziona per i piccoli archivi, ma ho avuto heap overflow con quelli più grandi. Per esempio:
./zip-arch test.zip +RTS -p -hy -M100M
per questo archive dà questo heap profile
Quel profilo dell'heap mostra un utilizzo dell'heap di 130k, che non indica alcun problema. Daro 'un'occhiata da solo. –
@DanielFischer strano, ma ho ricevuto questo messaggio di errore: Heap esaurito; La dimensione heap massima corrente è 104857600 byte (100 MB); usa '+ RTS -M 'per aumentarlo. –
tymmym
@tymmym: 'fromEntry' utilizza il checksum CRC32 dal pacchetto" digest ". fa crc32 invocando crc32 in zlib.h, questo potrebbe consumare un po 'di memoria? Non ne sono sicuro. – Nybble