package core
Install
dune-project
Dependency
Authors
Maintainers
Sources
md5=6f07bb82d51d695ac4e76c8ac7f55902
sha512=c3c401fded188f74cf7ce6b1b07e7bc59fe18441eec602d174bfd48db13370fda986dd9f66d4ff9c26254ea2b381e7c51b366df9d2dfbf66fda281b4def3166a
doc/core.heap_block/Heap_block/index.html
Module Heap_blockSource
A heap block is a value that is guaranteed to live on the OCaml heap, and is hence guaranteed to be usable with finalization or in a weak pointer.
It is an abstract type so we can use the type system to guarantee that the values we put in weak pointers and use with finalizers are heap blocks.
Some examples of values that are not heap-allocated are integers, constant constructors, booleans, the empty array, the empty list, the unit value. The exact list of what is heap-allocated or not is implementation-dependent. Some constant values can be heap-allocated but never deallocated during the lifetime of the program, for example a list of integer constants; this is also implementation-dependent. You should also be aware that compiler optimizations may duplicate some immutable values, for example floating-point numbers when stored into arrays; thus they can be finalized and collected while another copy is still in use by the program.
The results of calling String.make, Bytes.create, Bytes.make, Array.make, and Pervasives.ref are guaranteed to be heap-allocated and non-constant except when the length argument is 0.
create v returns Some t if v is a heap block, where t is physically equal to v.