On Wed, 09 Mar 2011 17:56:54 -0500, Jerry Quinn <[email protected]>
wrote:
Where I work, we find it very useful to start a process, load data, then
fork() to parallelize. Our data is large, such that we'd run out of
memory trying to run a complete copy on each core. Once the process is
loaded, we don't need that much writable memory, so fork is appealing to
share the loaded pages. It's possible to use mmap for some of the data,
but inconvenient for other data, even though it's read-only at runtime.
So here's my question: In D, if I create a lot of data in the
garbage-collected heap that will be read-only, then fork the process,
will I get the benefit of the operating system's copy-on-write and only
use a small amount of additional memory per process?
Do you know what causes the OS to regard that memory as read-only? Since
fork() is a C system call, and D gets its heap memory the same as any
other unix process (brk()), I can't see why it wouldn't work. As long as
you do the same thing you do in C, I think it will work.
-Steve