sig

  type allocation_source = Normal | Marshal | Custom
  type allocation = private {
    n_samples : int;
    size : int;
    source : Gc.Memprof.allocation_source;
    callstack : Stdlib.Printexc.raw_backtrace;
  }
  type ('minor, 'major) tracker = {
    alloc_minor : Gc.Memprof.allocation -> 'minor option;
    alloc_major : Gc.Memprof.allocation -> 'major option;
    promote : 'minor -> 'major option;
    dealloc_minor : 'minor -> unit;
    dealloc_major : 'major -> unit;
  }
  val null_tracker : ('minor, 'major) Gc.Memprof.tracker
  val start :
    sampling_rate:float ->
    ?callstack_size:int -> ('minor, 'major) Gc.Memprof.tracker -> unit
  val stop : unit -> unit
end