Hello again Julia users,

Sorry for the noise today, but I have another question which a quick
search didn't answer.

I am working on a function with a loop which creates an enlarged copy
of the same matrix at every iteration.  Let's say it looks similar to
this:

for i = 1:N
  A = zeros(BigFloat, 2^i, 2^i)
  # Now do something with A...
end

I will guess that this is bad performance-wise since Julia needs to
allocate a new array at each iteration through the loop.  Also, the GC
needs to come along occasionally and clean up all my old, discarded
arrays.  Meanwhile, I have accumulated a large number of old, unused
copies of A.  Am I right about the performance problem?

In C I would do something like this:

for(i = 1; i<=N; i++) {
  BigFloat* Ar = malloc((2i*2^i)*sizeof(BigFloat));
  /* Please forgive the obvious problem with pointers here... */
  /* Here I use the array */
  free(Ar);
}

That would release the memory at the end of each iteration, and I
could allocate a new Ar at the start of the next iteration.

What's the right way to do this in Julia?  Is it OK to invoke a GC run
at the end of each loop, or should I stop worrying and let Julia take
care of memory allocation/deallocation?

Thanks,

Stuart

Reply via email to