sig
  module Stat :
    sig
      type t =
        Core.Core_gc.Stat.t = {
        minor_words : float;
        promoted_words : float;
        major_words : float;
        minor_collections : int;
        major_collections : int;
        heap_words : int;
        heap_chunks : int;
        live_words : int;
        live_blocks : int;
        free_words : int;
        free_blocks : int;
        largest_free : int;
        fragments : int;
        compactions : int;
        top_heap_words : int;
        stack_size : int;
      }
      val bin_size_t : t Bin_prot.Size.sizer
      val bin_write_t : t Bin_prot.Map_to_safe.writer
      val bin_write_t_ : t Bin_prot.Unsafe_write_c.writer
      val bin_read_t : t Bin_prot.Read_ml.reader
      val bin_read_t_ : t Bin_prot.Unsafe_read_c.reader
      val bin_read_t__ : (int -> t) Bin_prot.Unsafe_read_c.reader
      val bin_writer_t : t Bin_prot.Type_class.writer
      val bin_reader_t : t Bin_prot.Type_class.reader
      val bin_t : t Bin_prot.Type_class.t
      val sexp_of_t : t -> Sexplib.Sexp.t
      val t_of_sexp : Sexplib.Sexp.t -> t
    end
  type stat = Stat.t
  module Control :
    sig
      type t =
        Core.Core_gc.Control.t = {
        mutable minor_heap_size : int;
        mutable major_heap_increment : int;
        mutable space_overhead : int;
        mutable verbose : int;
        mutable max_overhead : int;
        mutable stack_limit : int;
        mutable allocation_policy : int;
      }
      val bin_size_t : t Bin_prot.Size.sizer
      val bin_write_t : t Bin_prot.Map_to_safe.writer
      val bin_write_t_ : t Bin_prot.Unsafe_write_c.writer
      val bin_read_t : t Bin_prot.Read_ml.reader
      val bin_read_t_ : t Bin_prot.Unsafe_read_c.reader
      val bin_read_t__ : (int -> t) Bin_prot.Unsafe_read_c.reader
      val bin_writer_t : t Bin_prot.Type_class.writer
      val bin_reader_t : t Bin_prot.Type_class.reader
      val bin_t : t Bin_prot.Type_class.t
      val sexp_of_t : t -> Sexplib.Sexp.t
      val t_of_sexp : Sexplib.Sexp.t -> t
    end
  type control = Control.t
  external stat : unit -> stat = "caml_gc_stat"
  external quick_stat : unit -> stat = "caml_gc_quick_stat"
  external counters : unit -> float * float * float = "caml_gc_counters"
  external get : unit -> control = "caml_gc_get"
  external set : control -> unit = "caml_gc_set"
  external minor : unit -> unit = "caml_gc_minor"
  external major_slice : int -> int = "caml_gc_major_slice"
  external major : unit -> unit = "caml_gc_major"
  external full_major : unit -> unit = "caml_gc_full_major"
  external compact : unit -> unit = "caml_gc_compaction"
  val print_stat : out_channel -> unit
  val allocated_bytes : unit -> float
  val finalise : ('-> unit) -> '-> unit
  val finalise_release : unit -> unit
  type alarm = Core.Core_gc.alarm
  val create_alarm : (unit -> unit) -> alarm
  val delete_alarm : alarm -> unit
  val tune :
    ?logger:(string -> unit) ->
    ?minor_heap_size:int ->
    ?major_heap_increment:int ->
    ?space_overhead:int ->
    ?verbose:int ->
    ?max_overhead:int ->
    ?stack_limit:int -> ?allocation_policy:int -> unit -> unit
  val ounit_tests : unit -> OUnit.test
  val without_compactions :
    ?logger:(string -> unit) -> f:('-> 'b) -> '-> 'b
  val ounit_tests : unit -> OUnit.test
end