From 74076698347214bb70d73e864111b6e61c6fa6bb Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Thu, 24 Nov 2016 14:14:21 +0100 Subject: [PATCH] change strategy for vec reallocation --- src/util/vec.ml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/util/vec.ml b/src/util/vec.ml index 91177a34..6b079d7e 100644 --- a/src/util/vec.ml +++ b/src/util/vec.ml @@ -69,13 +69,15 @@ let grow_to_double_size t = let size = min Sys.max_array_length (2* Array.length t.data + 1) in grow_to_exact t size +(* grow to at least [new_capa] by increments of + approximately [new_size = old_size * 1.5] *) let grow_to_at_least t new_capa = assert (new_capa >= 0); if new_capa > Sys.max_array_length then _size_too_big (); let data = t.data in let capa = ref (Array.length data + 1) in while !capa < new_capa do - capa := min (2 * !capa + 1) Sys.max_array_length; + capa := min (!capa + (!capa lsr 1) + 2) Sys.max_array_length; done; grow_to_exact t !capa