diff options
author | Damien Doligez <damien.doligez-inria.fr> | 2001-02-05 14:59:24 +0000 |
---|---|---|
committer | Damien Doligez <damien.doligez-inria.fr> | 2001-02-05 14:59:24 +0000 |
commit | dcc3b0ce03b430103b47a83910e625b388c03c15 (patch) | |
tree | 59779c73d4f237dcf6c176d47f459083dad674de /stdlib/gc.ml | |
parent | 7a1d2f70addf4d0c8e8a2f9995b62aca40aef90a (diff) | |
download | ocaml-dcc3b0ce03b430103b47a83910e625b388c03c15.tar.gz |
gc.ml, gc.mli: compteurs flottants
arg.ml: affichage option -help
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@3399 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'stdlib/gc.ml')
-rw-r--r-- | stdlib/gc.ml | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/stdlib/gc.ml b/stdlib/gc.ml index 5d94d4d511..7a2d267205 100644 --- a/stdlib/gc.ml +++ b/stdlib/gc.ml @@ -13,9 +13,9 @@ (* $Id$ *) type stat = { - minor_words : int; - promoted_words : int; - major_words : int; + minor_words : float; + promoted_words : float; + major_words : float; minor_collections : int; major_collections : int; heap_words : int; @@ -39,7 +39,7 @@ type control = { };; external stat : unit -> stat = "gc_stat";; -external counters : unit -> (int * int * int) = "gc_counters";; +external counters : unit -> (float * float * float) = "gc_counters";; external get : unit -> control = "gc_get";; external set : control -> unit = "gc_set";; external minor : unit -> unit = "gc_minor";; @@ -51,9 +51,9 @@ open Printf;; let print_stat c = let st = stat () in - fprintf c "minor_words: %d\n" st.minor_words; - fprintf c "promoted_words: %d\n" st.promoted_words; - fprintf c "major_words: %d\n" st.major_words; + fprintf c "minor_words: %.0f\n" st.minor_words; + fprintf c "promoted_words: %.0f\n" st.promoted_words; + fprintf c "major_words: %.0f\n" st.major_words; fprintf c "minor_collections: %d\n" st.minor_collections; fprintf c "major_collections: %d\n" st.major_collections; fprintf c "heap_words: %d\n" st.heap_words; @@ -68,7 +68,26 @@ let print_stat c = ;; let allocated_bytes () = - let (mi, pro, ma) = counters () in (mi + ma - pro) * (Sys.word_size / 8) + let (mi, pro, ma) = counters () in + (mi +. ma -. pro) *. float_of_int (Sys.word_size / 8) ;; external finalise : ('a -> unit) -> 'a -> unit = "final_register";; + + +type alarm = {mutable active : bool; f : unit -> unit};; + +let rec call_alarm a = + if a.active then begin + finalise call_alarm a; + a.f (); + end; +;; + +let create_alarm f = + let a = { active = true; f = f } in + finalise call_alarm a; + a +;; + +let delete_alarm a = a.active <- false;; |