package ancient
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=5de5543eb760ed0495ed5d13cfc3248f98efccab580fd0ce37eb6df6492e0873
sha512=afb5349a9f242d7bc2f438b075f633305624768cb963fd277ff2b6866fa9f63be53350c1f897f87a53ccaea105b495eea6ce510b5b0ce0ae68ad863d865677ea
doc/ancient/Ancient/index.html
Module Ancient
Source
Mark objects as 'ancient' so they are taken out of the OCaml heap.
mark obj
copies obj
and all objects referenced * by obj
out of the OCaml heap. It returns the proxy * for obj
. * * The copy of obj
accessed through the proxy MUST NOT be mutated. * * If obj
represents a large object, then it is a good * idea to call Gc.compact
after marking to recover the * OCaml heap memory.
is_ancient ptr
returns true if ptr
is an object on the ancient * heap.
address_of obj
returns the address of obj
, or 0n
if obj
* is not a block.
Shared memory mappings
Memory descriptor handle.
attach fd baseaddr
attaches to a new or existing file * which may contain shared objects. * * Initially fd
should be a read/writable, zero-length file * (for example you could create this using Unix.openfile
and * passing the flags O_RDWR
, O_TRUNC
, O_CREAT
). * One or more objects can then be shared in this file * using Unix.share
. * * For new files, baseaddr
specifies the virtual address to * map the file. Specifying Nativeint.zero
(0n
) here lets mmap(2)
* choose this, but on some platforms (notably Linux/AMD64) * mmap
chooses very unwisely, tending to map the memory * just before libc
with hardly any headroom to grow. If * you encounter this sort of problem (usually a segfault or * illegal instruction inside libc), then look at /proc/PID/maps
* and choose a more suitable address. * * If the file was created previously, then the baseaddr
is * ignored. The underlying mmalloc
library will map the * file in at the same place as before.
share md key obj
does the same as Ancient.mark
except * that instead of copying the object into local memory, it * writes it into memory which is backed by the attached file. * * Shared mappings created this way may be shared between * other OCaml processes which can access the underlying * file. See Ancient.attach
, Ancient.detach
. * * More than one object can be stored in a file. The key
* parameter controls which object is written/overwritten by share
. * If you do not wish to use this feature, just pass 0
* as the key. * * Do not call Ancient.delete
on a mapping created like this. * Instead, call Ancient.detach
and, if necessary, delete the * underlying file. * * Caution when sharing files/objects between processes: * The underlying mmalloc
library does not do any sort of * locking, so all calls to share
must ensure that they have * exclusive access to the underlying file while in progress. * (Other processes should not even call Ancient.get
while * this is happening, but it seems safe to be just reading an * ancient object from the file).
get md key
returns the object indexed by key
in the * attached file. * * For details of the key
parameter see Ancient.share
. * * You need to annotate the returned object with the correct * type. As with the Marshal module, there is no type checking, * and setting the wrong type will likely cause a segfault * or undefined behaviour. Note that the returned object has * type sometype ancient
, not just sometype
. * *
Additional information
Extra information fields. See Ancient.mark_info
and * Ancient.share_info
.
Same as Ancient.mark
, but also returns some extra information.
Same as Ancient.share
, but also returns some extra information.