Last active
July 23, 2025 15:24
-
-
Save Octachron/9efacf12ed4ba0023603853305f5b9d2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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