sizehint! preallocates for you, with comparable cost to calling e.g. zeroes, but lets you treat the array semantically the same way as a non-preallocated one (but without the cost for reallocation). Hopefully, these comments highlight the differences between the various appraches:
N = 10_000 A = Array(Float64,0) sizehint!(A, 10_000) # this preallocates memory for 10k elements B = Array(Float64,0) C = zeros(10_000) # this also preallocates memory for 10k elements # now, A and C are pre-allocated, while B is not# however, A and B are semantically equivalent (0-length) vectors, # while C is already of length 10 000: println(length(A)) # 0 println(length(B)) # 0 println(length(C)) # 10000 for i in 1:10_000 push!(A, i) # no reallocation happens here, because we did it with sizehint! push!(B, i) # this will re-allocate B every now and then C[i] = i # can't use push! here, but must manually track index instead end I don't know what `dynamic` does in this context, and I can't find it in the docs, so can't help you there :) // T On Monday, November 16, 2015 at 2:07:13 AM UTC+1, Seth wrote: What happens if you use sizehint!() with dynamic()? > > On Sunday, November 15, 2015 at 3:35:45 PM UTC-8, Steven G. Johnson wrote: >> >> function prealloc(n) >> a = Array(Int, n) >> for i = 1:n >> a[i] = i >> end >> return a >> end >> function dynamic(n) >> a = Int[] >> for i = 1:n >> push!(a, i) >> end >> return a >> end >> @time prealloc(10^7); >> @time dynamic(10^7); >> >> >> On my machine, the preallocated version is 2.5–3x faster. A significant >> but not overwhelming margin. >> >
