Skip to content

Instantly share code, notes, and snippets.

@Octachron
Last active July 23, 2025 15:24
Show Gist options
  • Select an option

  • Save Octachron/9efacf12ed4ba0023603853305f5b9d2 to your computer and use it in GitHub Desktop.

Select an option

Save Octachron/9efacf12ed4ba0023603853305f5b9d2 to your computer and use it in GitHub Desktop.
external fiber_memory: unit -> int = "caml_fiber_memory" [@@noalloc]
external active_fiber_memory: unit -> int = "caml_active_fiber_memory" [@@noalloc]
let () = Format.eprintf "m : %d@." (fiber_memory ())
type _ Effect.t += Unit: unit Effect.t
let keep_fiber () =
let r = ref None in
let before, before' = active_fiber_memory (), fiber_memory () in
let perf () = Effect.perform Unit in
begin match perf () with
| () -> ()
| effect Unit, k ->
Format.eprintf "memory: %d/%d->%d/%d@."
before before' (active_fiber_memory ()) (fiber_memory ());
r := Some (k: (unit,unit) continuation)
end;
!r
let ephemeral_fiber () =
let before, before' = active_fiber_memory (), fiber_memory () in
begin match Effect.perform Unit with
| () -> ()
| effect Unit, k ->
let middle, middle' = active_fiber_memory (), fiber_memory () in
Format.eprintf "eph memory: %d/%d->%d/%d" before before' middle middle';
Effect.Deep.continue k ()
end;
Format.eprintf "->%d/%d@." (active_fiber_memory ()) (fiber_memory ())
let _ = Array.init 100 (fun _ -> ephemeral_fiber ())
let a = Array.init 100 (fun _ -> keep_fiber ())
let () = Array.iter (fun (Some k) ->
let before, before' = active_fiber_memory(), fiber_memory () in
Effect.Deep.continue k ();
Format.eprintf "free memory:%d/%d -> %d/%d@."
before before'
(active_fiber_memory ()) (fiber_memory ())
) a
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment