diff options
author | Sverker Eriksson <[email protected]> | 2015-03-10 18:07:11 +0100 |
---|---|---|
committer | Björn-Egil Dahlberg <[email protected]> | 2015-03-12 19:15:33 +0100 |
commit | 7478569d0a7d619d600816f3a75e56922d8ed428 (patch) | |
tree | 7c2a3783fd87c3b720464f748cf57a25d07ade6d /erts/emulator/beam/utils.c | |
parent | 01e843722aa39b3411d349c6fbea80ad87a6e9ef (diff) | |
download | otp-7478569d0a7d619d600816f3a75e56922d8ed428.tar.gz otp-7478569d0a7d619d600816f3a75e56922d8ed428.tar.bz2 otp-7478569d0a7d619d600816f3a75e56922d8ed428.zip |
erts: Tweak over estimation of hashmap size for binary_to_term
Strategy: Calculate an over estimation of heap size that will give
such a low probability for overflow, that "it will not happen".
Scary assumption 1: Uniformly distributed hash values.
Scary assumption 2: Tree size is normally distributed (right?)
Diffstat (limited to 'erts/emulator/beam/utils.c')
-rw-r--r-- | erts/emulator/beam/utils.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/erts/emulator/beam/utils.c b/erts/emulator/beam/utils.c index 674dddc86f..66f13461a1 100644 --- a/erts/emulator/beam/utils.c +++ b/erts/emulator/beam/utils.c @@ -352,6 +352,17 @@ int erts_fit_in_bits_int32(Sint32 value) return fit_in_bits((Sint64) (Uint32) value, 4); } +int erts_fit_in_bits_uint(Uint value) +{ +#if ERTS_SIZEOF_ETERM == 4 + return fit_in_bits((Sint64) (Uint32) value, 4); +#elif ERTS_SIZEOF_ETERM == 8 + return fit_in_bits(value, 5); +#else +# error "No way, Jose" +#endif +} + int erts_print(int to, void *arg, char *format, ...) { |