Functions to represent a Vector
on disk in efficient, if
unportable, ways.
This module uses memory-mapping, a feature of all modern operating-systems, to mirror the disk contents in memory. There are quite a few advantages to memory-mapping files instead of reading the files traditionally:
- Speed: memory-mapping is often much faster than traditional reading.
- Memory efficiency: Memory-mapped files are loaded into RAM on-demand, and easily swapped out. The upside is that the program can work with data-sets larger than the available RAM, as long as they are accessed carefully.
The caveat to using memory-mapping is that it makes the files specific to the current architecture because of the endianness of the data. For more information, see the description in System.IO.MMap
If you wish to write the contents in a portable fashion, either use the ASCII load and save functions in Numeric.Container, or use the binary serialization in Data.Binary.
Memory-mapping Vector
from disk
:: forall a . Storable a | |
=> FilePath | Path of the file to map |
-> Maybe (Int64, Int) |
|
-> IO (Vector a) |
Map a file into memory (read-only) as a Vector
.
It is considered unsafe because changes to the underlying file may
(or may not) be reflected in the Vector
, which breaks referential
transparency.
Writing Vector
to disk
These functions write the Vector
in a way suitable for
reading back with unsafeMMapVector
.