Andrei Alexandrescu wrote:
grauzone wrote:
* std.mmfile: integrate with the garbage collector. It should be
there.
Why should the GC know about it?
To add: in all sane situations, the mmaped region won't contain any
pointers, and the GC doesn't have to scan it. Allocating address space
is already done by the OS. Freeing the mmaped region is not the GC's
responsibility, but can be left to finalizers/destructors.
Because the only way to make memory-mapped files safe is to have the
GC handle them.
Care to explain?
mmhandle h = mapFile("test.txt");
char[] x = cast(char[]) h.ptr;
h.unmapFile;
Any attempt to use x will crash the program. So it's the gc who needs to
unmap files when they are no longer referenced.
Memory mapped files are unlike memory in that they keep the actual
mapped file locked. There must be a deterministic way to unlock those
files.
L.