Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Ocaml_intrinsics.Native_pointer
SourceNative_pointer
uses Nativeint to hold a pointer to a memory block allocated outside the OCaml heap. The pointer is not required to be aligned.
ext_pointer_as_native_pointer p
takes an int p
that encodes a pointer to a memory block outside of the OCaml heap, decodes p
by clearing the least significant bit of p
, and boxes the result as nativeint
. Unlike untagging, decoding p
does not shift the bits of p
.
Reinterpret any 'a as a native pointer. The unboxed result will have the same bit representation as the input value. If 'a is a pointer to outside the OCaml heap, the result may be used with load or store operations.
Reinterpret the unboxed contents of a native pointer as a value of any type. The result will have the same bit representation as the unboxed input pointer. The result must be a valid OCaml value: either an immediate or a pointer to an address with a valid OCaml header.
load_untagged_int t
reads untagged int pointed to by t
and returns the corresponding tagged int. This should only be used to read a value written by store_untagged_int
. Otherwise, if the value has most significant bit set, it will be lost by tagging. To avoid it, use load_unboxed_nativeint
and check before converting to int (should not allocate). Their native code C stub is the same.
store_untagged_int t d
untags d
and stores the result to the memory pointed to by t
.
load_unboxed_nativeint t
reads unboxed nativeint pointed to by t
and returns the corresponding (boxed) nativeint allocated on the OCaml heap.
store_unboxed_nativeint t d
stores the unboxed nativeint to the memory pointed to by t
.
load_unboxed_int64 t
reads unboxed int64 pointed to by t
and returns the corresponding (boxed) int64 allocated on the OCaml heap.
store_unboxed_int64 t d
stores the unboxed int64 to the memory pointed to by t
.
load_unboxed_int32 t
reads unboxed int32 pointed to by t
and returns the corresponding (boxed) int32 allocated on the OCaml heap.
store_unboxed_int32 t d
stores the unboxed int32 to the memory pointed to by t
.
For float operations, the pointer must be aligned at least to the native integer machine width (meaning on 32-bit platforms, a 32-bit-aligned pointer is acceptable even though the width of the float is 64 bits).
load_unboxed_float t
reads the unboxed float pointed to by t
. (If the result is not directly passed to another operation expecting an unboxed float, then it will be boxed.)
store_unboxed_float t d
stores the unboxed float to the memory pointed to by t
.
Pointer arithmetic and comparisons
difference_in_bytes start end
subtracts start from end, assuming that both point to the same block of memory (such as an array). The result is the number of bytes, not a pointer.
Adds n
bytes to a pointer, resulting in another pointer.
Equal operator is defined for any two pointers. Inequality operators are only defined when both pointers point to the same block of memory (such as an array).
Load and store immediate values. Intended for use with Int
and Bool
.