package ancient

  1. Overview
  2. Docs
Use data structures larger than available memory

Install

Dune Dependency

Authors

Maintainers

Sources

ancient-0.10.0.tbz
sha256=5de5543eb760ed0495ed5d13cfc3248f98efccab580fd0ce37eb6df6492e0873
sha512=afb5349a9f242d7bc2f438b075f633305624768cb963fd277ff2b6866fa9f63be53350c1f897f87a53ccaea105b495eea6ce510b5b0ce0ae68ad863d865677ea

doc/ancient/Ancient/index.html

Module AncientSource

Mark objects as 'ancient' so they are taken out of the OCaml heap.

Sourcetype 'a ancient
Sourceval mark : 'a -> 'a ancient

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.

Sourceval follow : 'a ancient -> 'a

Follow proxy link to out of heap object. * *

Sourceval delete : 'a ancient -> unit

delete obj deletes ancient object obj. * *

  • raises Invalid_argument

    "deleted" if the object has been deleted. * * Forgetting to delete an ancient object results in a memory leak.

Sourceval is_ancient : 'a -> bool

is_ancient ptr returns true if ptr is an object on the ancient * heap.

Sourceval address_of : 'a -> nativeint

address_of obj returns the address of obj, or 0n if obj * is not a block.

Shared memory mappings
Sourcetype md

Memory descriptor handle.

Sourceval attach : Unix.file_descr -> nativeint -> md

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.

Sourceval detach : md -> unit

detach md detaches from an existing file, and closes it.

Sourceval share : md -> int -> 'a -> 'a ancient

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).

Sourceval get : md -> int -> 'a ancient

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. * *

  • raises Not_found

    if no object is associated with the key.

Additional information
Sourcetype info = {
  1. i_size : int;
    (*

    Allocated size, bytes.

    *)
}

Extra information fields. See Ancient.mark_info and * Ancient.share_info.

Sourceval mark_info : 'a -> 'a ancient * info

Same as Ancient.mark, but also returns some extra information.

Sourceval share_info : md -> int -> 'a -> 'a ancient * info

Same as Ancient.share, but also returns some extra information.

OCaml

Innovation. Community. Security.