From 0a193a656a124bc0901c5cfae647b12774924567 Mon Sep 17 00:00:00 2001 From: Lyndon White Date: Sat, 13 Apr 2019 14:11:08 +0100 Subject: [PATCH] sizehint back down --- base/reduce.jl | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/base/reduce.jl b/base/reduce.jl index cb4c1e5a497cd..0295968ce58e6 100644 --- a/base/reduce.jl +++ b/base/reduce.jl @@ -383,10 +383,15 @@ function reduce(::typeof(vcat), xs, T::Type{<:AbstractVector}, isize) ret = copy(x1) # this is **Not** going to work for StaticArrays + hinted_size = 0 if !(isize isa SizeUnknown) # Assume first element has representitive size, unless that would make this too large - SIZEHINT_CAP = 10^6 - sizehint!(ret, min(SIZEHINT_CAP, length(xs)*length(x1))) + SIZEHINT_CAP = 10^5 + expected_size = length(xs)*length(x1) + if expected_size < SIZEHINT_CAP + hinted_size = expected_size + sizehint!(ret, hinted_size) + end end x_state = iterate(xs, state) @@ -395,6 +400,11 @@ function reduce(::typeof(vcat), xs, T::Type{<:AbstractVector}, isize) append!(ret, x) x_state = iterate(xs, state) end + + if length(ret) < hinted_size/2 # it is only allowable to be at most 2x to much memory + sizehint!(ret, length(ret)) + end + return ret end