Модуль Obj
module Obj: sig .. end
Операции над внутренними представлениями значений.
Не для случайных пользователей.
type t
type raw_data = nativeint
val repr : 'a -> t
val obj : t -> 'a
val magic : 'a -> 'b
val is_block : t -> bool
val is_int : t -> bool
val tag : t -> int
val size : t -> int
val reachable_words : t -> int
Вычисляет общий размер (в словах, включая заголовки) всех блоков кучи, доступных из аргумента. Статически выделенные блоки исключаются, если система выполнения не была настроена с --disable-naked-pointers.
- Since 4.04
val field : t -> int -> t
val set_field : t -> int -> t -> unit
При использовании flambda:
set_field НЕ ДОЛЖНО вызываться для неизменяемых блоков. (Блоки, выделенные в C-стыках или с использованием new_block ниже, всегда считаются изменяемыми.)
То же самое относится к set_double_field и set_tag. Однако для set_tag, в случае неизменяемых блоков, где оптимизаторы среднего уровня никогда не видят кода, который различает их метки (например, записи), операция должна быть безопасной. Тем не менее, такие использования не рекомендуется.
Только для специалистов: set_field и т.д. можно сделать безопасными, сначала обернув блок в Sys.opaque_identity, чтобы никакая информация о его содержимом не распространялась.
val set_tag : t -> int -> unit
val double_field : t -> int -> float
val set_double_field : t -> int -> float -> unit
val raw_field : t -> int -> raw_data
val set_raw_field : t -> int -> raw_data -> unit
val new_block : int -> int -> t
val dup : t -> t
val truncate : t -> int -> unit
val add_offset : t -> Int32.t -> t
val with_tag : int -> t -> t
val first_non_constant_constructor_tag : int
val last_non_constant_constructor_tag : int
val lazy_tag : int
val closure_tag : int
val object_tag : int
val infix_tag : int
val forward_tag : int
val no_scan_tag : int
val abstract_tag : int
val string_tag : int
val double_tag : int
val double_array_tag : int
val custom_tag : int
val final_tag : int
val int_tag : int
val out_of_heap_tag : int
val unaligned_tag : int
module Closure: sig .. end
module Extension_constructor: sig .. end
val extension_constructor : 'a -> extension_constructor
val extension_name : extension_constructor -> string
val extension_id : extension_constructor -> int
module Ephemeron: sig .. end
© 1995-2022 INRIA.
https://v2.ocaml.org/releases/4.14/htmlman/libref/Obj.html