Dear Julia users, I often need to use large temporary multidimensional arrays within loops. These temporary arrays don't necessarily have a fixed size, so allocating them just once before the start of the loop is not really an option. Allocating them within the loop triggers a lot of gc activity, which can have a non-negible impact on the performance.
I was now trying to use the following strategy: buffer=zeros(T,prod(firstdims)) tmp=reshape(buffer,firstdims) # initialize tmp for i in iter # do something with tmp of previous iteration # from here on, previous tmp is no longer needed resize!(buffer,prod(currentdims)) tmp=reshape(buffer,currentdims) # initialise new tmp end The idea would be that by using resize!, memory would only be allocated if the current length of tmp exceeds any length encountered before. In addition, I think resize! is directly using memory allocation calls in C and is not passing along the GC. Unfortunately, I get the following error: *ERROR: cannot resize array with shared data* * in resize! at array.jl:496* which makes sense. the old buffer is still used in the previous value of tmp, and I have not expressed that I will no longer need tmp. Is there a possibility to express this and to make this work, or is there a better suggestion of how to tackle this kind of problem?
