Hi again,

Yesterday I reported about recursive verbs with for loops leaking memory in
J903.

I investigated a little bit further and it turns out that this happens in
any verb with a for loop. It has nothing to do with recursion (and indeed,
why would it?). Sorry for this confusion.

My example is again trivial, and I do know that loops should generally be
avoided. But anyway:

F =: 3 : 'for_i. i.8 do. y end.'

W =: 3 : 'while. w < y do. F w=.w+1 end.'


w =: 0

7!:2 'W 10'

11712


w =. 0

7!:2 'W 10000'

10241472


It looks (to me) like 1024 bytes are leaked during each activation of F .


In j902 I get 2752, both times.


Ben



On Thu, 22 Jul 2021 at 12:52, Ben Gorte <[email protected]> wrote:

> G'day
>
> Below is an expensive method to compute powers of 8:
>
> RecFor =: 3 : 0
>
> if. y = 0 do.
>
> z =. 1
>
> else.
>
> z =. 0
>
> for_i. i.8 do.
>
> z =. z + RecFor y-1
>
> end.
>
> end.
>
> z
>
> )
>
>
> RecFor 6
>
> 262144
>
>
> The concerning thing is about the amount of memory required for this:
>
> 7!:2 'RecFor 6'
>
> 38352128
>
> 7!:2 'RecFor 7'
>
> 306788160
>
> 7!:2 'RecFor 8'
>
> 2454272384
>
>
> This happens in linux; I didn't try it in Windows at the office because of
> lockdown.
>
> If I do this several times, the task (as seen in top) gets bigger and
> bigger. Looks like a genuine memory leak, doesn't it?
>
>
> As far as I can see this happens only when combining a recursive verb and
> a for loop -- not when using either of those separately (but that makes it
> even more mysterious to me).
>
> JVERSION
>
> Engine: j903/j64avx2/linux
>
> Beta-k: commercial/2021-05-30T16:05:35
>
> Library: 9.03.06
>
> Qt IDE: 1.9.2/5.9.5(5.12.8)
>
> Platform: Linux 64
>
> Installer: J903 install
>
> InstallPath: /home/ben/j903
>
> Contact: www.jsoftware.com
>
>
> The good news is that I still have 902 around:
>
>
> 7!:2 'RecFor 5'
>
> 9344
>
> 7!:2 'RecFor 6'
>
> 11008
>
> 7!:2 'RecFor 7'
>
> 12672
>
>
> I suppose the small increase is now due to the stack size, is it?
>
>
> Greetings,
> Ben
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to