summaryrefslogtreecommitdiff
path: root/stdlib/gc.ml
diff options
context:
space:
mode:
authorDamien Doligez <damien.doligez-inria.fr>2001-02-05 14:59:24 +0000
committerDamien Doligez <damien.doligez-inria.fr>2001-02-05 14:59:24 +0000
commitdcc3b0ce03b430103b47a83910e625b388c03c15 (patch)
tree59779c73d4f237dcf6c176d47f459083dad674de /stdlib/gc.ml
parent7a1d2f70addf4d0c8e8a2f9995b62aca40aef90a (diff)
downloadocaml-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.ml35
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;;